Sed help: сопоставление и замена литерала "\n" (а не новой строки)

У меня есть файл, содержащий несколько экземпляров \n.

Я хотел бы заменить их фактическими символами новой строки, но sed не распознает \n.

Я попробовал

sed -r -e 's/\n/\n/'
sed -r -e 's/\\n/\n/'
sed -r -e 's/[\n]/\n/'

и многие другие способы избежать этого.

может распознать литерал \n? если да, то как?

есть ли другая программа, которая может читать файл, интерпретирующий \n как настоящие символы новой строки?

Ответ 1

Можете ли вы попробовать это

sed -i 's/\\n/\n/g' input_filename

Ответ 2

$ echo "\n" | sed -e 's/[\\][n]/hello/'

Ответ 3

awk, похоже, справляется с этим штрафом:

echo "test \n more data" | awk '{sub(/\\n/,"**")}1'
test ** more data

Здесь вам нужно выйти из \, используя \\

Ответ 4

1) sed work 1 line a t time son no\n только по одной строке (он удаляется sed во время чтения в буфер). Вы должны использовать N, n или H, h, чтобы заполнить буфер более чем одной строкой, а вместо него -\n. Будьте полезны, ^ и $не больше конца строки, а конец строки/буфера, так что \n находятся внутри. 2)\n распознается в шаблоне поиска, а не в шаблоне замены. 2 способа его использования (образец)

sed s/\(\n\)bla/\1blabla\1/
sed s/\nbla/\
blabla\
/

сначала используйте \n уже внутри как обратную ссылку (меньшая строка в замене шаблона) второй используйте новую новую строку

так basicaly

sed "N
$ s/\(\n\)/\1/g
"

работает (но немного бесполезно). Я полагаю, что s/\(\n\)\n/\1/g больше того, что вы хотите