2012-02-27 2 views
6

Как вставить символ новой строки после запятой в ),( с СЭД?Как вставить символ новой строки после запятой в `), (` с СЭД?

$ more temp.txt 
(foo),(bar) 
(foobar),(foofoobar) 

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

Почему это не работает?

+2

Какую платформу и версию sed вы используете? – potong

ответ

3

You просто должно уйти с обратной косой чертой и нажмите клавишу ввода при вводе:

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

Это не сработает, если вы поместите команду sed в файл bash. Только если вы поместите '\\' перед символом новой строки, он начнет работать. Но мне интересно, почему? – qazwsx

+0

@ user001 Для чего стоит точная команда, работавшая для меня в bash 4.2.10 в Ubuntu 11.10. – jcollado

6

sed не поддерживает последовательность \n бежать в substitu Команда Тион, однако, он поддерживает реальный символ новой строки, если избежать его (потому что sed команды должны использовать только одну строку, и побег здесь, чтобы сказать sed, что вы действительно хотите, символ новой строки):

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

Вы также можете использовать переменную оболочки для хранения символа новой строки.

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

Проверено на Mac OS X Lion, используя bash как оболочки.

+0

В первом подходе, почему это должно быть '\\', но не '\'? – qazwsx

+0

Команда, которую вы передаете 'sed', не должна содержать новую строку. Поэтому, если вы хотите передать новую строку, вам нужно избежать ее с помощью обратной косой черты, чтобы «sed» знал, что вы сделали это специально. И вам понадобится вторая обратная косая черта, чтобы защитить первое от интерпретации оболочки (использование обратной косой черты для escape-символа в regexp было IMHO плохая идея, поскольку она также обычно используется для указания символа в строке, и поэтому вам обычно приходится использовать двойную обратную косую черту в регулярном выражении). –