Board logo

标题: [文本处理] 【已解决】批处理如何给txt中指定重复出现的字符串加上系列数字后缀? [打印本页]

作者: wzf1024    时间: 2016-2-19 20:57     标题: 【已解决】批处理如何给txt中指定重复出现的字符串加上系列数字后缀?

本帖最后由 pcl_test 于 2016-9-30 23:01 编辑

有很多txt,存在某字符串重复出现的情况,需要给每个txt中重复出现的该词后缀序号,每三个增加1。
如下文本,字符串hide重复出现n次,在第一段出现3次,第2段中出现3次,类推……
如何将前3个hide替换为hide_1;之后的3个替换为hide_2;…………每3次一组,后缀序号相同,之后后缀序号加1
----------------------------------
第1段文本:
<input id="hide"
<div id="hide"
<span id="hide"
<HR>
第2段文本:
<input id="hide"
<div id="hide"
<span id="hide"
<HR>
……
……
---------------------------------
替换后为:
--------------------------------------------
第1段文本:
<input id="hide_1"
<div id="hide_1"
<span id="hide_1"
<HR>
第2段文本:
<input id="hide_2"
<div id="hide_2"
<span id="hide_2"
<HR>
……
……
作者: bailong360    时间: 2016-2-20 10:54

本帖最后由 bailong360 于 2016-2-20 10:55 编辑
  1. #&gawk -f %0 *.txt&exit
  2. Fname != FILENAME{n=num=0;Fname=FILENAME}
  3. {
  4.     if($0 ~ "hide") {
  5.         num+=!(n%3)
  6.         sub("hide", "hide""_"num)
  7.         n+=1
  8.     }
  9.     print>"New_"FILENAME
  10. }
复制代码

作者: wzf1024    时间: 2016-2-20 11:42

本帖最后由 wzf1024 于 2016-2-20 12:10 编辑

回复 2# bailong360


    不知道为什么bat在xp下没有作用捏,大侠,需要什么条件吗?第三方软件?
作者: bailong360    时间: 2016-2-20 12:35

回复 3# wzf1024
第三方gawk
作者: wzf1024    时间: 2016-2-20 13:49

回复 4# bailong360


   喔~我是小菜,不懂用gawk
作者: ivor    时间: 2016-2-20 14:13

本帖最后由 ivor 于 2016-2-20 14:32 编辑

回复 5# wzf1024

for /f ……
    试了一次echo %%a | find "HR",总提示文件找不到,服了,单条命令在CMD上就可以
作者: bailong360    时间: 2016-2-20 16:07

回复 5# wzf1024
下载后与批处理放在同一目录下
或者放到'Windows'文件夹下,其他的不用你管
作者: wzf1024    时间: 2016-2-20 21:08

回复 7# bailong360


    只能操作每行的第一个目标字符,行内多于1次的重复无效。见附件例子
作者: bailong360    时间: 2016-2-21 10:08

和这贴不差不多吗 http://www.bathome.net/thread-39344-1-1.html
借2楼pcl的代码改一改
  1. //&cls&dir /a-d /b *.txt|cscript -nologo -e:jscript "%~f0"&pause & exit
  2. function reStr(file){
  3.     var f = fso.opentextfile(file, 1);
  4.     var n=0, num=0,str = f.ReadAll().replace(/hide/g, function($0){
  5.         num+=!(n%3);var t = $0+'_'+num;n++;return t
  6.     });
  7.     f.Close();
  8.     var f = fso.opentextfile(file, 2);
  9.     f.Write(str);
  10.    
  11. }
  12. var fso = new ActiveXObject('Scripting.FileSystemObject');
  13. while(!WScript.StdIn.AtEndOfStream)reStr(WScript.StdIn.ReadLine());
复制代码

作者: wzf1024    时间: 2016-2-21 18:36

回复 9# bailong360


   如何同时操作子文件夹内的文件?非常感谢
作者: wzf1024    时间: 2016-2-21 18:39

喔,知道了,加个/s




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2