[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何在文本首个/第一个出现的含有指定字符串/关键字的行的末尾添加指定内容

本帖最后由 pcl_test 于 2016-12-24 07:56 编辑

求助!编辑文本文件。
本人那小白,请求大神帮帮忙!
有一个20万行左右的文本文件,要求找到关键字的那行之后,在行末尾加入一段字符,再之后保存文件就可以了。(只做一次,后面如果有关键字的行就不用做处理)
文本文件大小4M左右,关键字位置大概在2之3万行左右,最好处理效率要高,不能太慢。。。
有哪位热心大哥能帮忙写段代码,万分感谢!!!!

本帖最后由 lyhli13 于 2016-12-23 21:47 编辑

多谢各路大神!多谢管理哈哈
你们的智慧让我在工作中轻松了好多啊,减少了一个很烦人又必须要做的动作,真心感谢你们的帮助!!!谢谢谢谢了!!!
如果还有什么问题我会再回来请教各位的!

TOP

  1. /*&cls
  2. @echo off
  3. set "file=文本.txt"
  4. set "keywords=关键字"
  5. set "addstr=添加的内容"
  6. set "tmpfile=$tmp.txt"
  7. cscript -nologo -e:jscript "%~f0" "%file%" "%tmpfile%" "%keywords:\=\\%" "%addstr%"
  8. rem move "%tmpfile%" "%file%"
  9. pause&exit
  10. */
  11. var fso=new ActiveXObject('Scripting.FileSystemObject');
  12. var text=fso.OpenTextFile(WSH.Arguments(0), 1).ReadAll();
  13. var keywords=WSH.Arguments(2).replace(/[*.?+$^[\](){}|/]/g, '\\$&')
  14. var reg=new RegExp(keywords+'[^\\r\\n]*')
  15. var text=text.replace(reg, '$&'+WSH.Arguments(3));
  16. fso.CreateTextFile(WSH.Arguments(1), 2).Write(text);
复制代码

TOP

  1. @echo off
  2. set "file=文本.txt"
  3. for /f "delims=:" %%a in ('findstr /nl /c:"关键词" "%file%"') do set n=%%a&goto :end
  4. :end
  5. if defined n (
  6.     (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%file%"') do (
  7.         if "%%a" equ "%n%" (echo;%%b添加的内容) else echo;%%b
  8.     ))>"$tmp.txt"
  9.     rem move "$tmp.txt" "%file%"
  10. ) else echo;Not Found
  11. pause
复制代码

TOP

  1. gawk "{if($0~/Here's your \[Keyword]/ && !a){a=1;$0=$0\"ABC\"}};1" a.txt > b.txt
复制代码

TOP

  1. $s = [IO.File]::ReadAllText('a.txt', [Text.Encoding]::Default);
  2. ([regex]('(?i)' + [regex]::Escape("Here's your [Keyword]") + '[^\r\n]*')).Replace($s, '$&ABC', 1) > b.txt
复制代码

TOP

回复 6# lyhli13


    更改

TOP

100万行数据2秒处理完,保存vbs即可
Nsqs 发表于 2016-12-22 13:38


多谢大神!我那个专用应用程式貌似只能调用bat格式的批处理,麻烦能不能再用bat批处理代码写个?
1

评分人数

    • pcl_test: 指定回应某楼层的在相应楼层点回复,少引用PB -2

TOP

把你的文件压缩一下传到百度网盘,方便测试。

TOP

本帖最后由 Nsqs 于 2016-12-22 21:53 编辑
  1. :on error resume next
  2. :sub class_bat
  3. ' 2>nul&echo off&cls
  4. cscript -nologo -e:vbs "%~0"
  5. pause
  6. exit sub
  7. :end sub
  8. set fso=CreateObject("Scripting.FileSystemObject")
  9. set regexp=new regexp
  10. file="1.txt"
  11. RegExp.Global=0:RegExp.IgnoreCase=-1
  12. RegExp.Pattern="(.*关键字.*)" '关键字
  13. t=timer
  14. read=fso.opentextfile(file).readall
  15. s="abc" '替换后
  16. result=RegExp.Replace(read,"$1"&s)
  17. wsh.echo timer-t &" 秒"
  18. fso.createtextfile("new.txt").write result
  19. set fso=nothing:set regexp=nothing
复制代码
保存bat即可

TOP

对对,就是在指定行尾加几个字符。
文件比较大,用批处理能写出比较高效的代码吗?

TOP

修改之前:
a
b
关键字
c
关键字
d


修改之后:
a
b
关键字 bathome
c
关键字
d

是这个意思吗?

TOP

返回列表