Windows-使用脚本在一堆文件中查找/替换XML标记中的内容:sed of bash或cmd batch?
在我的Windows 10中,在同一目录下有100多个XML文件,它们包含相同的标记,比如说Windows-使用脚本在一堆文件中查找/替换XML标记中的内容:sed of bash或cmd batch?,xml,windows,batch-file,sed,git-bash,Xml,Windows,Batch File,Sed,Git Bash,在我的Windows 10中,在同一目录下有100多个XML文件,它们包含相同的标记,比如说,具有不同的内容,例如4564564或7777 现在,我想用123456替换所有不同的值 我安装了gitbash,发现sed可能有用。但是,恕我直言,bash中的for无法迭代目录下的文件,而且我不知道在bash中迭代文件的其他方法,相反,Windows批处理中的for可以(如果我错了,请纠正我)。所以 我是否可以使用批处理FOR进行迭代,并在循环中使用bash的sed,即混合使用GNU bash命令和
,具有不同的内容,例如4564564
或7777
现在,我想用123456
替换所有不同的值
我安装了gitbash,发现sed可能有用。但是,恕我直言,bash
中的for
无法迭代目录下的文件,而且我不知道在bash中迭代文件的其他方法,相反,Windows批处理中的for
可以(如果我错了,请纠正我)。所以
- 我是否可以使用批处理
进行迭代,并在循环中使用bash的FOR
,即混合使用GNU bash命令和cmd命令?当我测试时,这似乎是不可能的sed
- 如果前一个是不可能的,我可以这样做,或者在纯bash脚本中,或者在纯批处理中
@echo on
setlocal ENABLEEXTENSIONS
set here=%cd%
for /R %here% %%G in (*.xml) do (
echo %%G
for /F "skip=2 tokens=* " %%H in (%%G) do (
echo %%H | sed -r 's:<Number>([0-9]+)</Number>:<Number>123456</Number>:'
)
)
endlocal
我已经安装了Git bash,显然,sed.exe
可以在Git bash和cmd
中找到。在cmd
中,sed--version
给了我:
sed (GNU sed) 4.2.2
...
这将是一个纯粹的
sed
解决方案:
sed -r 's:<Number>([0-9]+)</Number>:<Number>123456</Number>:' -i *.xml
伟大的解决方案,在这里工作!现在我想知道批处理爱好者会说什么…我不确定批处理爱好者会说什么,但PowerShell爱好者会说使用。Unix爱好者会说:过来,我们有(更多)饼干
sed -r 's:<Number>([0-9]+)</Number>:<Number>123456</Number>:' -i *.xml
for file in *.xml; do
echo "Processing file: $file"
sed -r 's:<Number>([0-9]+)</Number>:<Number>123456</Number>:' -i "$file"
# ...
done