我正在将 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 '…' {} +