2013-01-07 64 views
0

我正在使用GNU sed命令(GNU sed version 4.2.1)進行搜索並在文件中進行替換。 我希望輸入文件保持不變,因此我使用sed的文件寫入選項。GNU sed排除不匹配的行

以下是命令

sed -e "s/INSERT/UPDATE/w output.txt" "input.txt" 

但隨着上述命令的問題是,它不寫不匹配的行。即,如果沒有找到該文本則被搜索的文本所在的行沒有被寫入output.txt文件。

我要被寫入output.txt的

匹配的行如何可以做到這一點?

回答

1

使用w作爲一個單獨的命令,即:

sed -e 's/INSERT/UPDATE/' -e 'w output.txt' input.txt 

,或者,如果您sed支持的話,你可以使用一個分號:

sed -e 's/INSERT/UPDATE/;w output.txt' input.txt 

但是,如果你真的只是想輸出在一個文件中,使用重定向:

sed -e 's/INSERT/UPDATE/' input.txt > output.txt 
+0

謝謝choroba,第一個選項的工作。我知道第三個選項,但我不能使用它,因爲c#不允許它執行通過ProcessInfo對象提供重定向選項。 – Sagar

+0

只是爲了解釋發生了什麼,表達式「/// w」的意思是「寫入,如果替換成功」,而///; w'是替換和(無條件)寫入的兩個命令。 – tripleee

+0

我對'c#'一無所知,但是ProcessInfo對象肯定會允許你寫'sh -c「sed ...> output.txt」'。 –