标题: [文本处理] 批处理如何在文本首个/第一个出现的含有指定字符串/关键字的行的末尾添加指定内容 [打印本页]
作者: lyhli13 时间: 2016-12-20 20:49 标题: 批处理如何在文本首个/第一个出现的含有指定字符串/关键字的行的末尾添加指定内容
本帖最后由 pcl_test 于 2016-12-24 07:56 编辑
求助!编辑文本文件。
本人那小白,请求大神帮帮忙!
有一个20万行左右的文本文件,要求找到关键字的那行之后,在行末尾加入一段字符,再之后保存文件就可以了。(只做一次,后面如果有关键字的行就不用做处理)
文本文件大小4M左右,关键字位置大概在2之3万行左右,最好处理效率要高,不能太慢。。。
有哪位热心大哥能帮忙写段代码,万分感谢!!!!
作者: GNU 时间: 2016-12-21 11:50
修改之前:
a
b
关键字
c
关键字
d
修改之后:
a
b
关键字 bathome
c
关键字
d
是这个意思吗?
作者: lyhli13 时间: 2016-12-21 23:10
对对,就是在指定行尾加几个字符。
文件比较大,用批处理能写出比较高效的代码吗?
作者: Nsqs 时间: 2016-12-22 13:38
本帖最后由 Nsqs 于 2016-12-22 21:53 编辑
- :on error resume next
- :sub class_bat
- ' 2>nul&echo off&cls
- cscript -nologo -e:vbs "%~0"
- pause
- exit sub
- :end sub
- set fso=CreateObject("Scripting.FileSystemObject")
- set regexp=new regexp
- file="1.txt"
- RegExp.Global=0:RegExp.IgnoreCase=-1
- RegExp.Pattern="(.*关键字.*)" '关键字
- t=timer
- read=fso.opentextfile(file).readall
- s="abc" '替换后
- result=RegExp.Replace(read,"$1"&s)
- wsh.echo timer-t &" 秒"
- fso.createtextfile("new.txt").write result
- set fso=nothing:set regexp=nothing
复制代码
保存bat即可
作者: GNU 时间: 2016-12-22 14:40
把你的文件压缩一下传到百度网盘,方便测试。
作者: lyhli13 时间: 2016-12-22 20:49
100万行数据2秒处理完,保存vbs即可
Nsqs 发表于 2016-12-22 13:38
多谢大神!我那个专用应用程式貌似只能调用bat格式的批处理,麻烦能不能再用bat批处理代码写个?
作者: Nsqs 时间: 2016-12-22 21:54
回复 6# lyhli13
更改
作者: WHY 时间: 2016-12-23 10:17
- $s = [IO.File]::ReadAllText('a.txt', [Text.Encoding]::Default);
- ([regex]('(?i)' + [regex]::Escape("Here's your [Keyword]") + '[^\r\n]*')).Replace($s, '$&ABC', 1) > b.txt
复制代码
作者: WHY 时间: 2016-12-23 10:18
- gawk "{if($0~/Here's your \[Keyword]/ && !a){a=1;$0=$0\"ABC\"}};1" a.txt > b.txt
复制代码
作者: pcl_test 时间: 2016-12-23 12:48
- @echo off
- set "file=文本.txt"
- for /f "delims=:" %%a in ('findstr /nl /c:"关键词" "%file%"') do set n=%%a&goto :end
- :end
- if defined n (
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%file%"') do (
- if "%%a" equ "%n%" (echo;%%b添加的内容) else echo;%%b
- ))>"$tmp.txt"
- rem move "$tmp.txt" "%file%"
- ) else echo;Not Found
- pause
复制代码
作者: pcl_test 时间: 2016-12-23 20:17
- /*&cls
- @echo off
- set "file=文本.txt"
- set "keywords=关键字"
- set "addstr=添加的内容"
- set "tmpfile=$tmp.txt"
- cscript -nologo -e:jscript "%~f0" "%file%" "%tmpfile%" "%keywords:\=\\%" "%addstr%"
- rem move "%tmpfile%" "%file%"
- pause&exit
- */
-
- var fso=new ActiveXObject('Scripting.FileSystemObject');
- var text=fso.OpenTextFile(WSH.Arguments(0), 1).ReadAll();
- var keywords=WSH.Arguments(2).replace(/[*.?+$^[\](){}|/]/g, '\\$&')
- var reg=new RegExp(keywords+'[^\\r\\n]*')
- var text=text.replace(reg, '$&'+WSH.Arguments(3));
- fso.CreateTextFile(WSH.Arguments(1), 2).Write(text);
复制代码
作者: lyhli13 时间: 2016-12-23 21:44
本帖最后由 lyhli13 于 2016-12-23 21:47 编辑
多谢各路大神!多谢管理哈哈
你们的智慧让我在工作中轻松了好多啊,减少了一个很烦人又必须要做的动作,真心感谢你们的帮助!!!谢谢谢谢了!!!
如果还有什么问题我会再回来请教各位的!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |