标题: [文本处理] [已解决]批处理怎样获取指定字符串所在行之后的文本? [打印本页]
作者: jzsgyml 时间: 2011-4-12 19:19 标题: [已解决]批处理怎样获取指定字符串所在行之后的文本?
下午发个帖子意思有偏差,现在重新请教各位朋友了。
两个日志文件,一个源文件source.txt,一个源文件处理得到的成功文件Success.txt ,成功文件不一定是源文件前面的全部,因为有失败的,现在打算获取成功文件最后一行的字符串,然后去源文件查找并且删除之前的内容,或者换个方式,查找源文件该字符串所在行,然后获取该行数之后的内容保存。
举例:源文件source.txt- a0001
- a0002
- a0003
- a0004
- a0005
- a0006
- a0007
- a0008
- a0009
- a0010
复制代码
成功文件Success.txt复制代码
然后我找到个获取成功文件最后一行的代码- for /f "delims=" %%i in (Success.txt) do (set a=%%i)
- echo %a%>>3.txt
复制代码
这个可以得到成功文件的最后一行 a0005的数据,请问怎么根据这个数据删除源文件该数据之前的所有数据,并且覆盖保存?
得到如下结果- a0006
- a0007
- a0008
- a0009
- a0010
复制代码
作者: hanyeguxing 时间: 2011-4-12 19:32
本帖最后由 hanyeguxing 于 2011-4-12 19:50 编辑
- @echo off
- set a=Success.txt
- set b=source.txt
- for /f "usebackq delims=" %%a in ("%a%") do set "n=%%a"
- for /f "delims=:" %%a in ('findstr /ni /c:"%n%" "%b%"') do set n=%%a
- more +%n% "%b%">temp
- move temp "%b%"
复制代码
代码未测试:从%a%文件获取最后一行内容并以此内容查询%b%文件中的行号,再以此行号跳过然后覆盖输出
ps:源文件中的最后一行a0010怎么到最后还没了?
作者: batman 时间: 2011-4-12 19:43
成功和不成功是这么有规律?成功就连续成功,一不成功就都不成功了?
作者: jzsgyml 时间: 2011-4-12 20:05
谢谢二楼版主帮助,这次运行没有问题,通过成功文件最后一行的字符串查找,就可以删除前面不管成功,还是失败的,具有通用性,现在测试没有问题了!
另外那个结果文件a0010,是我复制错了,应该是有的!我现在在主帖改过来,防止误导后来需要的朋友!
回复三楼,成功失败是随机的,失败的处理行就不会保存在成功文件,所以成功文件是内容是源文件的随机子集。
作者: Batcher 时间: 2011-4-12 21:01
1# jzsgyml - @echo off
- for /f "delims=" %%i in (Success.txt) do (
- set a=%%i
- )
- sed -i "0,/%a%/d" source.txt
复制代码
作者: hanyeguxing 时间: 2011-4-13 07:32
- @echo off
- set a=Success.txt
- set b=source.txt
- for /f "usebackq delims=" %%a in ("%a%") do set "n=%%a"
- if defined n for /f "delims=:" %%a in ('findstr /ni /c:"%n%" "%b%"') do set m=%%a
- if defined m (
- more +%m% "%b%">temp
- move temp "%b%"
- )
复制代码
作者: jzsgyml 时间: 2011-4-13 13:24
谢谢斑竹大人!最好的批处理论坛,我们永远支持!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |