2012-12-04 136 views
1

我檢查,看看我是否可以取代包括這樣的:Perl正則表達式替換?

#include <pathFoo/whatever.H> 

有:

#include "whatever.H" 

這樣做,我會使用-i選項,但要檢查我做的它正確,我只是使用不帶-i的-p開關。我有以下命令:

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

但這不是很工作,我不完全確定哪個部分是關閉的?

回答

4

你不想逃避括號,即:

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

應該爲你工作。

另請注意結尾/

1
perl -i~ -pe's!<pathFoo/(.*)>!"$1"!' file 

以下是安全的:

perl -i~ -pe's!#include\s+\K<pathFoo/(.*)>!"$1"!' file 
0

我認爲這將讓你有:

perl -pi -e 's{#include[ ]+<.+?/([^/]+)>}{#include "$1"}g' file 
1

由於TIMTOWTDI,這裏是一個雙重替代。或者更確切地說,替代和音譯:

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

所以,只要先取下pathFoo/部分,如果成功,那麼<>字符音譯爲引號。