2012-02-27 525 views

回答

3

你只是有一個反斜槓字符逃跑,然後按回車鍵,打字時:

$ sed 's/),(/),\ 
(/g' temp.txt 
(foo), 
(bar) 
(foobar), 
(foofoobar) 
+0

如果您將sed命令放在bash文件中,這不起作用。只有在新行字符前加上'\\',它纔會開始工作。但我想知道爲什麼? – qazwsx 2012-02-27 22:42:37

+0

@ user001值得一提的是,在Ubuntu 11.10中完全相同的命令在bash 4.2.10中爲我工作。 – jcollado 2012-02-27 23:01:38

6

sed不支持其substitu的\n轉義序列重刑命令,但是,它支持一個真正的換行符,如果你逃避它(因爲sed命令應該只使用一個單一的線,逃避這裏告訴sed,你真的想要一個換行符):

$ sed 's/),(/),\\ 
(/g' temp.txt 
(foo), 
(bar) 
(foobar), 
(foofoobar) 

您也可以使用shell變量來存儲換行符。

$ NL=' 
' 
$ sed "s/),(/,\\$NL(/g" temp.txt 
(foo), 
(bar) 
(foobar), 
(foofoobar) 

測試在Mac OS X Lion中,使用bash爲殼。

+0

在第一種方法中,爲什麼它需要'\\'而不是'\'? – qazwsx 2012-02-27 22:41:52

+0

您傳遞給'sed'的命令不應包含換行符。所以如果你想傳遞一個換行符,你需要用一個反斜槓來轉義它,這樣'sed'知道你是故意的。你需要第二個反斜槓來保護第一個被shell解釋(使用反斜槓來轉義正則表達式中的字符是恕我直言,因爲它通常也用於引用字符串中的字符,因此通常必須使用雙反斜槓在正則表達式中)。 – 2012-02-28 09:29:58