2017-01-16 73 views
-1

sample_file:搜索和替換一個班輪保留換行符

this is a test line! 
this is a test line! 
this is a test line! 
this is a test line! 

我使用一個Perl的一行來代替文字是這樣的:

perl -pi -e 's{this(.*)\s}{\n\1\n}i && s{.*\n}{}' sample_file 

this(.*)\s部分和\1部分是變量,我不能改變(它來自用戶輸入)。

我的問題是我需要根據第一個正則表達式是否包含換行符來調整{\n\1\n}部分。

例如,如果第一個正則表達式是{this(.*)\s}我需要{\n\1\n},但如果第一個像{(.*)a test}我需要{\n\1}

如何檢查換行符是否丟失並在必要時放回去?

+0

它不會在第一個地方工作 - ''-pi'會導致你的東西逐行迭代。 – Sobrique

+0

你從錯誤的地方開始,你的問題是誤導。我建議你問另一個問題,顯示你已經嘗試過的內容,並描述你想要應用到你的文件的轉換。 – Borodin

+0

你真的不應該要求你的用戶輸入正則表達式模式! – Borodin

回答

1

一般而言,您要輸入chomp行,並在輸出行中添加換行符。 -l(與-n-p一起)將同時做到這兩點。

例如,以下內容不會替代換行符!,因爲它已被-l(並隨後由print重新添加)刪除。

perl -i -ple's/\s/!/g' file 

順便說一句,\1(「匹配的內容捕獲的第一捕獲」)使得替換沒有任何意義。你想要$1(因爲-w會告訴你)。

+0

謝謝,基本上-l解決了我的問題! – zjeraar