我正在检查是否可以替换这样的包含:
#include <pathFoo/whatever.H>
和:
#include "whatever.H"
为此,我将使用 -i 开关,但要检查我是否正确执行此操作,我只是使用不带 -i 的 -p 开关。我有以下命令:
perl -p -e 's/<pathFoo\/\(.*\)>/"$1"' thefile
但这不是很有效,我不确定哪一部分是关闭的?
你不想逃避括号,即:
perl -p -e 's/<pathFoo\/(.*)>/"$1"/' thefile
应该为你工作。
还要注意结尾/
。
perl -i~ -pe's!<pathFoo/(.*)>!"$1"!' file
以下更安全:
perl -i~ -pe's!#include\s+\K<pathFoo/(.*)>!"$1"!' file
自 TIMTOWTDI 以来,这里有一个双重替换。或者更确切地说是替代和音译:
perl -pe 's|^#include\s+<\KpathFoo/|| && tr/<>/""/'
因此,只需先删除该pathFoo/
部分,如果成功,然后将<>
字符音译为引号。
我认为这会让你到达那里:
perl -pi -e 's{#include[ ]+<.+?/([^/]+)>}{#include "$1"}g' file