LINUX.ORG.RU

Как заменить переносы строки симолами «\n»?

 , , ,


2

2

Привет! Подскажите как с помощью bash или shell, можно вместо невидимых переносов поставить видимые символы \n ? Т.е. дан текстовый файл вида :

бла
бла
бла

С помощью каких команд его можно привести к виду

бла/nбла/nбла ? 



Последнее исправление: xtala (всего исправлений: 2)
Ответ на: vim от slon

А из командной строки как можно сделать? С указанием конкретного файла?

xtala
() автор топика
Ответ на: комментарий от slon

Да, я бы с радостью, но у меня времени катастрофически времени нет, нужно готовое решение костыль :( . Мне вот тут на тостере подсказали

/home/oracle/aaa>cat text.txt
bla
blah
bleah
/home/oracle/aaa>sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/,/g' text.txt > ou
/home/oracle/aaa>cat ou
bla,blah,bleah
Только здесь вместо \n запятая, а надо \n прописью. Если просто вводить \n то ничего не меняется и строки просто переносятся. Надо как-то экранировать его. Чтобы оно выводилось как текст.

xtala
() автор топика

Решение не очень тривиальное, так как перевод строки не является частью pattern space в sed (источник):

$ echo -e 'a\nb\nc' | sed ':a;N;$!ba;s!\n!\\n!g'
a\nb\nc
Посты про tr игнорируй, он не умеет заменять один символ на два.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от xtala

Зачем вам sed на таком уровне, что вы его не понимаете, делайте в две команды — одной дописать косую черту, а другой заменить перенос строки на 'n':

sed 's/$/\\/' text.txt  | tr '\n' 'n' > ou

mky ★★★★★
()
Ответ на: комментарий от mky

Ой, спасибо, дорогой! Век не забуду! Вот это работает! :D

xtala
() автор топика
a=$(<FILE)
a="${a//$'\n'/\\n}"

Не то? Вообще BASH сам, без всяких внешних утилит, умеет весьма немало.

DRVTiny ★★★★★
()
Последнее исправление: DRVTiny (всего исправлений: 1)
awk -v ORS='\\n' 1
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.