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(如果我错了请纠正我)。所以,
- 我可以使用批处理
FOR
进行迭代并在循环中使用 sed
或 bash,即混合使用 GNU bash 命令和 cmd 命令吗?正如我测试的那样,这似乎是不可能的。
- 如果前一个不可能,我可以做还是纯 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
运行 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
在我的Windows10中,我在同一个目录下有100+个XML个文件,它们包含相同的标签,比方说<Number>
,但内容不同,例如<Number>4564564</Number>
,或 <Number>7777</Number>
。
现在,我想用 123456
替换所有不同的值。
我安装了 Git bash 并且发现 sed
可能有用。但是,据我所知,bash
中的 for
无法迭代目录下的文件,而且我不知道在 bash 中迭代文件的其他方法,而是 [=50= 中的 FOR
] batch can(如果我错了请纠正我)。所以,
- 我可以使用批处理
FOR
进行迭代并在循环中使用sed
或 bash,即混合使用 GNU bash 命令和 cmd 命令吗?正如我测试的那样,这似乎是不可能的。 - 如果前一个不可能,我可以做还是纯 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
运行 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