LINUX.ORG.RU

Как передать многострочный текст как одну строку?


0

2

Задача: передать некоторый текст (чаще всего многострочный) по конвееру в скрипт как одну строку. Всё бы ничего, только как заменить нормальный конец строки сочетанием \n?

tr и paste не предлагать. Задачу нужно решить чем-то в роде sed. Итоговый текст должен иметь вид: "...слово\nдругое_слово..." или "...слово \nдругое_слово..."

★★

Всё бы ничего, только как заменить нормальный конец строки сочетанием \n?

Ничего не понял. А '\n' (один символ) - это разве не конец строки?

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

Мне нужно заменить конец строки (собственно сам «LF») на текстовую комбинацию «\\n» таким образом сжав весь переданный текст до одной строки, в которой непосредственно «LF» не будет в принципе.

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

Почти то что надо!

cat ~/1.txt | sed 's/$/\\n/g' | awk '{printf «%s\\n»,$0}'

Единственный минус в том что \\n - не делает переноса на новую строку, а \\\n - переносит сразу на 2

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

А если в тексте уже были "\n" ?

Нет. Их там не может быть по определению самой задачи.

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

Решено!

cat ~/1 | awk '{printf «%s\\\\n»,$0}'

sergv, вот что бы я без тебя делал?

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

К сожалению, этот вариант не работает.

Странно. Я на gawk и mawk получил абсолютно идентичный выхлоп...

А! Файл ./1 есть.

cat ~/1 | awk -v ORS='\\\\n' '{print}'
sergv
()
Ответ на: комментарий от sergv

А так работает. Без нареканий!

zzdnx ★★
() автор топика

на sed

$ sed -n ':l;$!{N;bl};$s/\n/c/gp'

drBatty ★★
()

Чистый shell: cat ~/1.txt | while read line; do echo -n «$line\\n»; done

vasil_sd
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.