2015-07-12 28 views
0

我在做一個就地搜索&用Perl替換。我需要替換包含另一個單詞的所有行中的所有單詞。例如,僅在包含PMPI_的行中刪除所有const。隨着sed我可以這樣做:Perl - 只在符合其他模式的行中替換模式

sed -i "/PMPI_/ s/const//g" file.c 

不過,我需要多線能力和sed似乎並沒有爲這份工作的合適工具。無論如何,我正在使用Perl。我試過

perl -pi -e "/PMPI_/ s/const//g" file.c 

和其他變化沒有成功。我只能找到搜索這個網站的vim regex等價物。

+0

上多SED作品。 –

+0

@AvinashRaj是的,但是根據[這個答案](http://unix.stackexchange.com/a/26290/34931)來判斷,Perl似乎更適合這份工作。 – Alex

+1

@Alex:據我所知,'perl -pi -e's/const // g如果/ PMPI_ /「file.c'或'perl -pi -e」/ PMPI_ /和s/const // g「file.c'會做你需要的。我不明白你對多行工作的參考,但是:'PMPI_'一次只能出現在一行中! – Borodin

回答

2

的語法是:

perl -pi -e "s/const//g if /PMPI_/" file 

注意:你說你需要多行的能力。我不認爲你正在尋找思樂普模式(即加載整個文件),但你也可以通過段落與-00選項工作:

echo 'PMPI_ const 
const const' | perl -00 -p -e "s/const//g if /PMPI_/" 
+0

這麼簡單...我想我應該開始閱讀一些Perl指南。謝謝。 – Alex