找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29752|回复: 11

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

[复制链接]
发表于 2016-12-20 20:49:43 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-12-24 07:56 编辑

求助!编辑文本文件。
本人那小白,请求大神帮帮忙!
有一个20万行左右的文本文件,要求找到关键字的那行之后,在行末尾加入一段字符,再之后保存文件就可以了。(只做一次,后面如果有关键字的行就不用做处理)
文本文件大小4M左右,关键字位置大概在2之3万行左右,最好处理效率要高,不能太慢。。。
有哪位热心大哥能帮忙写段代码,万分感谢!!!!
发表于 2016-12-21 11:50:38 | 显示全部楼层
修改之前:
a
b
关键字
c
关键字
d


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

是这个意思吗?
 楼主| 发表于 2016-12-21 23:10:15 | 显示全部楼层
对对,就是在指定行尾加几个字符。
文件比较大,用批处理能写出比较高效的代码吗?
发表于 2016-12-22 13:38:18 | 显示全部楼层
本帖最后由 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即可
发表于 2016-12-22 14:40:18 | 显示全部楼层
把你的文件压缩一下传到百度网盘,方便测试。
 楼主| 发表于 2016-12-22 20:49:51 | 显示全部楼层
100万行数据2秒处理完,保存vbs即可
Nsqs 发表于 2016-12-22 13:38


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

评分

参与人数 1PB -2 收起 理由
pcl_test -2 指定回应某楼层的在相应楼层点回复,少引用

查看全部评分

发表于 2016-12-22 21:54:05 | 显示全部楼层
回复 6# lyhli13


    更改
发表于 2016-12-23 10:17:37 | 显示全部楼层
  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
复制代码
发表于 2016-12-23 10:18:07 | 显示全部楼层
  1. gawk "{if($0~/Here's your \[Keyword]/ && !a){a=1;$0=$0"ABC"}};1" a.txt > b.txt
复制代码
发表于 2016-12-23 12:48:17 | 显示全部楼层
  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
复制代码
发表于 2016-12-23 20:17:02 | 显示全部楼层
  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);
复制代码
 楼主| 发表于 2016-12-23 21:44:49 | 显示全部楼层
本帖最后由 lyhli13 于 2016-12-23 21:47 编辑

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 16:50 , Processed in 0.024546 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表