Board logo

标题: [求助]怎样提取文本中间的哪一行? [打印本页]

作者: pusofalse     时间: 2008-4-19 19:44    标题: [求助]怎样提取文本中间的哪一行?

a.txt:

1jd
2sdfls
3sd
4kop
5df
6sd

我只想提取出3sd
该怎么做?
谢谢~
作者: bat-zw     时间: 2008-4-19 20:07    标题: 下次请把要求写清楚了:

首先建议搜索。
1按行搜索(第三行)
@echo off
for /f "delims=: tokens=1*" %%i in ('findstr /n .* a.txt') do if %%i equ 3 set str=%%j
echo %str%
pause>nul
2按字符搜索(字符为3)
@echo off
for /f "delims=" %%i in ('findstr "3" a.txt') do set str=%%i
echo %str%
pause>nul

作者: pusofalse     时间: 2008-4-19 20:11    标题: 回复2楼

那2个方法我也会,只是a.txt当中的内容是未知的,也怪我没说清楚,我想提取出a.txt中的第三行,第五行,第七行。。
作者: bat-zw     时间: 2008-4-19 20:32    标题: 这也容易:


@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
    set /a n+=1
    for %%a in (3,5,7) do if !n! equ %%a set str=%%i&echo !str!
)
pause>nul
[ Last edited by zw19750516 on 2008-4-19 at 08:42 PM ]
作者: pusofalse     时间: 2008-4-19 20:41
谢谢~~~ 一指点就明白了~~ 第一段代码,稍作修改下也可以~
@echo off&setlocal enabledelayedexpansion
for /f "delims=:" %%a in ('findstr /n .* a.txt') do set line=%%a
for /f "delims=" %%i in (a.txt) do (
    set /a n+=1
    for /l %%a in (3,2,%line%) do if !n! equ %%a set str=%%i&echo !str!
)
pause>nul

这样的话 不管有多少行,都会提取从3开始的奇数行了~~
作者: abcd     时间: 2008-4-19 21:54

sed -n "1,2d;$!N;P" a.txt

作者: ThinKing     时间: 2008-4-20 00:13
GNU sed
sed -n "3p;3~2p" a.txt

作者: ThinKing     时间: 2008-4-20 00:21

@echo off & SetLocal EnableDelayedExpansion

for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do (
    set /a a=%%a%%2
    if %%a geq 3 if !a! equ 1 echo.%%b
)

作者: 26933062     时间: 2008-4-20 03:06
从第3行开始取奇数行。
:
@echo off&setlocal enabledelayedexpansion
set n=3
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
   set str=%%a&set /a m+=1
   set str=!str:*:=!
   if !m! equ !n! (set /a n+=2&echo.!str!)
)
pause

作者: plp626     时间: 2008-4-20 03:38
我来个一句话的:
@for /f "skip=2 delims=" %%a in (test.txt) do @if not defined plp (echo.%%a &set "plp=626") else set "plp="

作者: 26933062     时间: 2008-4-20 04:12


  Quote:
Originally posted by plp626 at 2008-4-20 03:38:
我来个一句话的:
@for /f "skip=2 delims=" %%a in (test.txt) do @if not defined plp (echo.%%a &set "plp=626") else set "plp="

巧妙!