Как отобразить файл с несколькими строками как одну строку с 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