我使用 Visual Studio 进行 C# 开发,同时使用 Cygwin 完成一些需要脚本编写的任务。最近,我想将项目文件中所有出现的字符串更改AAA
为。BBB
我从旧的可信赖的开始sed
,但令我沮丧的是,它将 DOS 新行序列更改为 Unix 行序列。
这是我使用的:
sed -i 's/AAA/BBB/g' $(grep -rl AAA /cygdrive/c/project_path)
似乎没有sed
开关可以做我想要的事情。还有其他 Unix 工具可以帮助我吗?
编辑:在 C# 文件之间还有一些其他脚本具有 Unix 换行符。这个工具最好不要将它们更改为 DOS 版本。 :)
答案1
VS 中必须有一个内置函数。
如果没有,你可以使用旧的vi
:
vi +'bufdo %s/AAA/BBB/g | update' +q $(grep -rl AAA /cygdrive/c/project_path)
答案2
您可以使用 Cygwin 的 perl 代替。典型的 sed 命令很容易映射到 Perl。请注意,正则表达式语法不同(Perl 中的扩展正则表达式,sed 中的基本正则表达式)。
perl -i -pe 's/AAA/BBB/g' $(grep -rl AAA /cygdrive/c/project_path)
请注意,将命令替换的结果解析为文件列表是很脆弱的。如果文件名中有空格或反斜杠,它就会中断;两者在 Windows 下都相当常见(当路径尚未从本机转换为 cygwin 时,例如当它来自环境变量时,您会得到反斜杠)。请使用xargs -d '\n'
(Windows 文件名中没有换行符)。
grep -rl AAA /cygdrive/c/project_path | xargs -d '\n' perl -i -pe 's/AAA/BBB/g'