bash/sh: sed и символ перевода строки \n




1829
bash/sh: sed и символ перевода строки \n
Рейтинг 8 из 10. Голосов: 1
Ваша оценка:
Проблема: нам нужно через sed заменить символы перевода строки какими-то другими символами (например, пробелами). Но что делать - sed не воспринимает запись escape-последовательности вида \n и не хочет с нами дружить.

Да, в мануале к sed так и написано - оно не будет работать с \n в своих выражениях. Но есть обходной путь - использовать конструкцию tr:

echo -en "This\nis\nmultiline\nstring" | tr '\n' '_'
This_is_multiline_string

Как видим, tr успешно заменил символ перевода строки \n на знаки подчеркивания, с которыми уже сумеет справиться sed.


Возможна и обратная ситуация - когда какие-то символы нужно заменить на перевод строки. Вот пример:

echo "filename1 filename2 filename3" | tr ' ' '\n'
filename1
filename2
filename3

В данном примере tr заменит все пробелы на переводы строк.

Вопросы и ответы


Класс, спасибо.