Board logo

标题: [文件操作] 请教怎么用批处理把文件中特定的区间给替换掉? [打印本页]

作者: qqask    时间: 2021-1-24 22:03     标题: 请教怎么用批处理把文件中特定的区间给替换掉?

本帖最后由 qqask 于 2021-1-24 22:51 编辑

比如说某个n.js内容是这样的:
mu->doe = ['( tr <br>
     tekt  ( tr uapp "(Finction rood (\;)<br>
     ord  ( a b c)<br>

  )<br>
]

  mu->Koe = ['( tr<br>
     tekt  ( tr uapp "(Finction rood (\;)..<br>
     ord  ( a b c)<br>

  )<br>
]

  mu->Yoe = ['( tr <br>
     tekt  ( tr uapp "(Finction rood (\;)<br>
     ord  ( a b c)<br>

  )<br>
]
想把mu->Koe = 这段方括号[]之间的内容替换成其他字符串,比如换成这样:
mu->doe = ['( tr <br>
     tekt  ( tr uapp "(Finction rood (\;)<br>
     ord  ( a b c)<br>

  )<br>
]

  mu->Koe = [778899]

  mu->Yoe = ['( tr <br>
     tekt  ( tr uapp "(Finction rood (\;)<br>
     ord  ( a b c)<br>

  )<br>
]
mu->Koe =这段所在文件的位置不一定,方括号里面的文字也不一样。一般采用正则表达式好些吧?
作者: Batcher    时间: 2021-1-24 22:46

回复 1# qqask


    建议使用支持正则替换的文件编辑器
作者: qqask    时间: 2021-1-24 22:50

回复 2# Batcher
文件较多,且更新频繁,想弄个批处理文件一键处理完毕。
找了些能正则替换的软件,要不不支持批量正则替换,要不替换效果不是很好。
作者: qqask    时间: 2021-1-24 22:57

sed ":a;$!{N;ba};s/mu->Koe = \[.*\]/778899/g" n.js
这句话能实现一定的替换,但是一直替换到最后一个]号了,能不能终止在第一个]号?
作者: flashercs    时间: 2021-1-25 07:16

  1. sed -b -E -e ":a;$!{N;ba};s/(mu->Koe = \[)[^][]*/\1778899/g" n.js
复制代码

作者: qixiaobin0715    时间: 2021-1-25 12:40

回复 1# qqask
纯批好像也行:
  1. @echo off
  2. set n=true
  3. setlocal enabledelayedexpansion
  4. for %%i in (*.js) do (
  5.     (for /f "delims=" %%a in ('findstr /n ".*" "%%i"') do (
  6.         set "str=%%a"
  7.         set "str1=!str:*>=!"
  8.         set "str=!str:*:=!"
  9.         if "!str1:~0,3!"=="Koe" set n=false&echo,mu-^>Koe = [778899]
  10.         if !n!==true echo,!str!
  11.         if "!str!"=="]" if !n!==false set n=true
  12.     ))>#%%i
  13. )
  14. pause
复制代码

作者: qqask    时间: 2021-1-26 09:55

谢谢各位。
flashercs的代码挺管用。
sed的简单些,纯批的好像有点复杂,但也是一种选择。
作者: netdzb    时间: 2021-1-26 10:14

回复 1# qqask


看你是处理的js 代码,你的代码是否可以呀js来写




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