Windows - find/replace 内容在一堆文件中的 XML 标签中,脚本:bash 的 sed 或 cmd 批处理?

Windows - find/replace content in a XML tag in a bunch of files with script: sed of bash or cmd batch?

在我的Windows10中,我在同一个目录下有100+个XML个文件,它们包含相同的标签,比方说<Number>,但内容不同,例如<Number>4564564</Number>,或 <Number>7777</Number>

现在,我想用 123456 替换所有不同的值。

我安装了 Git bash 并且发现 sed 可能有用。但是,据我所知,bash 中的 for 无法迭代目录下的文件,而且我不知道在 bash 中迭代文件的其他方法,而是 [=50= 中的 FOR ] batch can(如果我错了请纠正我)。所以,

我有的是这样的一批:

@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

运行 cmd 和 Git bash 中的这批给了我同样的错误:

The system cannot find the path specified.

我安装了 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

(注意,sed 可以按顺序操作多个文件。-i 标志指示它进行就地编辑。)

如果您还需要做其他事情,您可以使用这个纯 bash+sed 脚本遍历文件:

for file in *.xml; do
    echo "Processing file: $file"
    sed -r 's:<Number>([0-9]+)</Number>:<Number>123456</Number>:' -i "$file"
    # ...
done