在bash中,我如何显示多行作为单个字符串的文件内容,其中新行显示为\n
。
示例:
$ echo "line 1
line 2" >> file.txt
我需要使用bash命令获取内容"line 1\nline2"
。
我尝试使用cat/printf/echo
的组合但没有成功。
答案 0 :(得分:5)
您可以使用bash' printf
来取得成果:
$ printf "%q" "$(< file.txt)"
$'line1\nline2'
并且在bash
4.4中有一个新的参数扩展运算符来生成相同的内容:
$ foo=$(<file.txt)
$ echo "${foo@Q}"
$'line1\nline2'
答案 1 :(得分:1)
$ cat file.txt
line 1
line 2
$ paste -s -d '~' file.txt | sed 's/~/\\n/g'
line 1\nline 2
您可以使用paste
命令粘贴序列中的所有行,并使用~
分隔符替换所有~
并\n
sed
命令
答案 2 :(得分:0)
你可以尝试从标准输入或文件中输出一个字符串并修剪所需的模式......
试试这个:
cat file|tr '\n' ' '
其中file是带有\ n的文件名。这将返回一个包含所有文本的字符串。
如果你想将结果写入文件,只需重定向命令的结果,就像这样。
cat file|tr '\n' ' ' >> file2
这是另一个例子: How to remove carriage return from a string in Bash
答案 3 :(得分:0)
在文件2之后没有'\ n',您需要使用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
在第2行之后使用'\ n'
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
答案 4 :(得分:0)
此工具还可以显示字符代码:
$ 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