使用特殊字符在命令行上递归查找和替换

时间:2016-03-23 23:45:29

标签: bash shell replace command-line escaping

我试图以递归方式浏览文件夹结构并更新一堆pom.xml文件。我只想更新我的版本号,所以我尽量做到尽可能准确。我想改变的是:

<version>5.1.1</version>

<version>5.2.0</version>

我试图包含版本标签,以确保我不会替换任何相同版本号可能出现的评论或依赖项。

我认为像'&lt;,&gt;这样的字符或/'造成问题。

我没有太多经验在命令行上转义这样的字符,所以任何帮助都表示赞赏。

我在Windows 7机器上,但安装了Git Bash和Cygwin。

1 个答案:

答案 0 :(得分:2)

我要么使用名为&#34; fart.exe的工具&#34;为此 - 如果更换很简单。 https://sourceforge.net/projects/fart-it/

如果我需要正则表达式,我使用电源外壳。 下面是一个示例(批处理文件和power-shell的混合),它替换了所有XML文件中的版本字符串:

[replace.bat]:

SET version=1.2.3
for /r %%x in (*.xml) do (  
    powershell -Command "& {(Get-Content '%%x') | Foreach-Object { $_ -replace '(''version''\s?\:\s?'')(\d*\.\d*\.\d*)('')', '${1}%version%${3}' } | Set-Content '%%x'}"
)