如何使用perl搜索兩個順序換行符(\ n)?或者更具體地說,爲什麼即使它們存在,搜索也不成功?我有一個連續換行符的文件(使用十六進制編輯器來完成,它們不是返回值等),但是perl似乎並不接受這個正則表達式。如何使用perl搜索兩個連續換行符( n)?
的perl -pi -e 'S/\ n \ n /測試/ G' 將myfile.xml =沒有結果
實際上,我試圖插入一些代碼到XML文件,但換行符在中間,那麼最優雅的方式是什麼?我想出了一個可怕的perl單行文本,但是雙行文件似乎會導致失敗。
我想改變從一個gtkrc文件的一部分:
GtkWidget::link-color = @link_color
GtkWidget::visited-link-color = @text_color
####################
# Color Definitions
####################
到:
GtkWidget::link-color = @link_color
GtkWidget::visited-link-color = @text_color
GtkWindow::resize-grip-height = 0
GtkWindow::resize-grip-width = 0
####################
# Color Definitions
####################
使用的原代碼的一部分作爲我的搜索詞(也有各自之前的標籤在原始腳本線上,順便說一句),我的查找和替換條款是:
color\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color
color\n\n\tGtkWindow::resize-grip-height = 0\n\tGtkWindow::resize-grip-width = 0\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color
我想出了這個大ugl Ÿperl的命令:
perl -pi -e 's/color\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color/color\n\n\tGtkWindow::resize-grip-height = 0\n\tGtkWindow::resize-grip-width = 0\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color/g' /usr/share/themes/Ambiance/gtk-2.0/gtkrc
編輯:從扎伊德更正代碼:
perl -0777 -pi -e 's/color\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color/color\n\n\tGtkWindow::resize-grip-height = 0\n\tGtkWindow::resize-grip-width = 0\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color/g' /usr/share/themes/Ambiance/gtk-2.0/gtkrc
如前所述,它似乎是\ n \ n表示出現問題的原因是什麼都可以更換。有什麼更好的方法來做到這一點?
我在Ubuntu 11.10上,命令將從shell腳本運行而不是perl腳本。
我會給你一個鏡頭,謝謝。我認爲我需要轉義所有散列,因此從shell腳本運行時不會將其解釋爲註釋。正如你所指出的,我的解決方案是可怕的。捕捉字符串的使用更加優雅。我只有大約2天進入perl,並且有很多東西需要學習。 – Veazer 2012-01-31 16:42:25
@ user30441這不是捕獲,它是查找斷言。在shell腳本中使用時,元字符會變得麻煩。將代碼放入腳本並調用它可能會更容易。例如。 'perl/home/script.pl'。 – TLP 2012-01-31 16:48:16
感謝您的澄清。我試圖避免調用任何外部腳本,並且您的方法運行良好。 – Veazer 2012-01-31 17:01:02