根据条件在多个文件中搜索和替换

根据条件在多个文件中搜索和替换

我正在将 Visual Studio C++ 项目移植到 Linux,并且希望找到所有 .h 和 .cpp 文件中以 #include 开头的所有行,并且希望在任何这些行中将反斜杠替换为正斜杠。

有一些关于如何在线搜索和替换的脚本(例如使用 perl 或 sed),但没有一个带有条件。

最好的办法是什么?

谢谢

答案1

在 sed 中,您可以在命令/…/之前放置一个正则表达式(在 之间)s,以便仅对包含该正则表达式的行执行替换。就地修改文件的选项-i特定于 GNU sed(这是 Linux 和 Cygwin 上的选项)。

sed -i -e '/^ *# *include/ s!\\\\!/!g' **/*.h **/*.cpp

在 Perl 中,只需在进行替换之前添加一个条件即可。

perl -i -pe 'if (/^\s*#\s*include/) {s!\\\\!/!g}' **/*.h **/*.cpp
perl -i -pe '/^\s*#\s*include/ and s!\\\\!/!g' **/*.h **/*.cpp

**/递归匹配当前目录及其子目录中文件的语法需要 zsh,或者执行 后 bash ≥4 shopt -s globstar。对于其他 shell,您需要使用 find。

find \( -name '*.h' -o -name '*.cpp' \) -exec perl -i -pe '…' {} +

相关内容