1

我正在检查是否可以替换这样的包含:

#include <pathFoo/whatever.H>

和:

#include "whatever.H"

为此,我将使用 -i 开关,但要检查我是否正确执行此操作,我只是使用不带 -i 的 -p 开关。我有以下命令:

perl -p -e 's/<pathFoo\/\(.*\)>/"$1"' thefile

但这不是很有效,我不确定哪一部分是关闭的?

4

4 回答 4

4

你不想逃避括号,即:

perl -p -e 's/<pathFoo\/(.*)>/"$1"/' thefile

应该为你工作。

还要注意结尾/

于 2012-12-05T00:02:52.893 回答
1
perl -i~ -pe's!<pathFoo/(.*)>!"$1"!' file

以下更安全:

perl -i~ -pe's!#include\s+\K<pathFoo/(.*)>!"$1"!' file
于 2012-12-05T00:05:44.770 回答
1

自 TIMTOWTDI 以来,这里有一个双重替换。或者更确切地说是替代和音译:

perl -pe 's|^#include\s+<\KpathFoo/|| && tr/<>/""/'

因此,只需先删除该pathFoo/部分,如果成功,然后将<>字符音译为引号。

于 2012-12-05T00:18:40.447 回答
0

我认为这会让你到达那里:

perl -pi -e 's{#include[ ]+<.+?/([^/]+)>}{#include "$1"}g' file
于 2012-12-05T00:09:38.110 回答