标题: [文本处理] 批处理如何删除多个文本中指定字符/关键字/字符串所在行之前的所有行? [打印本页]
作者: lwbu571 时间: 2011-11-18 16:18 标题: 批处理如何删除多个文本中指定字符/关键字/字符串所在行之前的所有行?
本帖最后由 pcl_test 于 2016-8-5 20:35 编辑
批处理怎样查找指定关键字读取txt中所在行,删除关键字前面行- @echo off
- for /f "delims=" %%i in ('dir /s/b *.txt') do (
- findstr "#" "%%i" >> op.txt
- )
- start op.txt
- exit
复制代码
同一文件夹下有多个txt,每个txt中行数各不相同,列数各不相同。
其中每个txt里任意一行的行首以#开头,且只有一行。
我想找到每个txt中以#开头的行,并将之前的行全删除,保留包括#开头的行在内的以下各行形成新的txt文件。
请问该如何实现?我百度的这个只能找到#开头的行,请问如何修改?
作者: awk 时间: 2011-11-18 16:21
- sed "/^#/,$!d" a.txt >a_new.txt
复制代码
作者: cjiabing 时间: 2011-11-18 16:56
手机打的,自己修改下。
for /f "tokens=1* delims=#:" %%a in ('findstr /n /b "#" 123.txt') do echo:%%b| more /+%%a
作者: lwbu571 时间: 2011-11-19 12:33
好像不行啊,版主。我发其中的2个txt帮忙看下
作者: cjiabing 时间: 2011-11-19 14:24
回复 4# lwbu571
如果你要#的话,简单点:
复制代码
7表示#开始的行。
复杂点:
- for /f "tokens=1* delims=#:" %%a in ('findstr /n /b "#" d:\a.txt') do echo;%%b&more +%%a d:\a.txt
复制代码
作者: CrLf 时间: 2011-11-19 14:28
回复 4# lwbu571
早贴附件就好了...这题吧,可以只取以 # 或空格开头的行:- findstr /bc:"#" /c:" " a.txt
复制代码
也可以排除以字母为首的行:- findstr /vb "[a-Z]" b.txt
复制代码
如果原文件格式与样本不符,那按楼主原意就是这样:- @echo off
- for /f "delims=" %%a in (a.txt) do (
- set str=%%a
- setlocal enabledelayedexpansion
- if "!str:~,1!"=="#" set echo=yes
- for /f "delims=" %%b in ("!echo!") do (
- endlocal
- set echo=%%a
- )
- )
- pause
复制代码
或者不开变量延迟:- @echo off
- for /f "delims=" %%a in (a.txt) do (
- for /f "delims=#" %%b in ("@%%a") do if %%b==@ set echo=yes
- if defined echo echo %%a
- )
- pause
复制代码
作者: lwbu571 时间: 2011-11-19 15:22
我晕,都是我的错啊。我上传附件以#开头的行都在第7行,所以版主可能误解我的原意了。
我的问题是多个txt;
以#开头的行数在各个txt中不一样,可能为2,7,10等等;我原本是计划找到#开头行获得行号,再删除#开头行的各个txt中之前的那些行
作者: lwbu571 时间: 2011-11-19 15:47
大概是懂了,呵呵,不过只能找一个txt,多个要怎么循环?
还请劳烦版主明示,我想将结果生成新的txt,名字与原来相同。
作者: weichenxiehou 时间: 2011-11-19 17:03
回复 8# lwbu571
既然sed那么好用,为什么不用呢?- @echo off
- for /f "delims=" %%i in ('dir /b /s *.txt') do (
- sed -ni "/^#/,$p" "%%i"
- )
复制代码
作者: awk 时间: 2011-11-19 18:00
回复 9# weichenxiehou - sed -n -i "/^#/,$p" "%%i" *.txt
复制代码
作者: powerbat 时间: 2011-11-19 19:57
- @set @n=0/*
- @echo off
- for /f "delims=" %%i in ('dir /b *.txt') do (
- cscript.exe -e:jscript "%~f0" "%%i" >>op.txt
- )
- exit /b
- */
-
- fso = new ActiveXObject("Scripting.FileSystemObject");
- s = fso.OpenTextFile(WScript.Arguments(0)).ReadAll();
- a = s.match(/^#/m);
- if(a) WScript.Echo( s.slice(a.lastIndex-1) );
复制代码
作者: lwbu571 时间: 2011-11-20 10:54
本帖最后由 CrLf 于 2011-11-20 11:35 编辑
呵呵,高手众多。那我在多问句,经过处理后的txt再进一步假设我想在各txt中找GR,SP列另存为新txt应该如何操作。GR,SP列在各txt的位置不同。
——————————————————————————————————
由于楼主已另开新帖,为节省论坛空间,故将原附件删除。 by Crlf
作者: CrLf 时间: 2011-11-20 11:08
回复 12# lwbu571
请把所有要求更新到顶楼,再删除 12 楼重复附件
作者: lwbu571 时间: 2011-11-20 11:22
那我从新发帖问好了,谢谢
作者: lwbu571 时间: 2011-11-20 13:58
小结一下下:cjiabing版主代码可用,powerbat 代码可用(但是将所有结果都放在一个txt中,会很大很大。。。);
CrLf 版主代码经新建txt,保存bat后运行貌似没反应,看来我还得好好学习下;
weichenxiehou 、awk 代码运行时提示无sed命令。。。请问是何故?本人XP系统
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |