如何使用转义字符显示多行作为单个字符串的文件(\ n)

时间:2016-11-11 03:01:22

标签: bash shell terminal io-redirection

在bash中,我如何显示多行作为单个字符串的文件内容,其中新行显示为\n

示例:

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

我需要使用bash命令获取内容"line 1\nline2"

我尝试使用cat/printf/echo的组合但没有成功。

5 个答案:

答案 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