Как отобразить файл с несколькими строками как одну строку с escape-символами (\n)

В Bash, как я могу отображать содержимое файла с несколькими строками в виде одной строки, где новые строки отображаются как \n,

Пример:

$ echo "line 1
line 2" >> file.txt

Мне нужно получить содержание как это "line 1\nline2" с командами bash.

Я пытался использовать комбинации cat/printf/echo без успеха.

5 ответов

Решение

Вы можете использовать Баш printf чтобы получить что-то близкое:

$ printf "%q" "$(< file.txt)"
$'line1\nline2'

И в bash 4.4 есть новый оператор расширения параметров, чтобы произвести то же самое:

$ foo=$(<file.txt)
$ echo "${foo@Q}"
$'line1\nline2'
$ cat file.txt 
line 1
line 2
$ paste -s -d '~' file.txt | sed 's/~/\\n/g'
line 1\nline 2

Ты можешь использовать paste Команда вставить все строки последовательно с разделителем скажем ~ и заменить все ~ с \n с sed команда.

Эти инструменты могут также отображать коды символов:

$ hexdump -v -e '/1 "%_c"' file.txt ; echo
line 1\nline 2\n

$ od -vAn -tc file.txt 
   l   i   n   e       1  \n   l   i   n   e       2  \n

Без '\n' после файла 2 вам нужно использовать echo -n

echo -n "line 1
line 2" > file.txt

od -cv file.txt
0000000   l   i   n   e       1  \n   l   i   n   e       2

sed -z 's/\n/\\n/g' file.txt
line 1\nline 2

С '\n' после строки 2

echo "line 1
line 2" > file.txt

od -cv file.txt
0000000   l   i   n   e       1  \n   l   i   n   e       2  \n

sed -z 's/\n/\\n/g' file.txt
line 1\nline 2\n

Вы можете попробовать скопировать строку из стандартного файла или файла и обрезать нужный шаблон...

попробуй это:

cat file|tr '\n' ' '

где файл - это имя файла с \n. это вернет строку со всем текстом в одной строке.

если вы хотите записать результат в файл, просто перенаправьте результат команды, например так.

cat file|tr '\n' ' ' >> file2

Вот еще один пример: Как удалить возврат каретки из строки в Bash

Другие вопросы по тегам