2012-02-27 156 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