如何将包含多行的文件显示为带有转义字符 () 的单个字符串



在 bash 中,如何将具有多行的文件的内容显示为单个字符串,其中新行显示为n.

例:

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

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

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

你可以

使用 bash 的printf来接近一些东西:

$ printf "%q" "$(< file.txt)"
$'line1nline2'

bash 4.4 中,有一个新的参数展开运算符来生成相同的参数:

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

您可以使用paste命令用分隔符 say ~ 连续粘贴的所有行,并将所有~替换为 n 并带有 sed 命令。

文件 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 1nline 2

第 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 1nline 2n

此工具还可能显示字符代码:

$ hexdump -v -e '/1 "%_c"' file.txt ; echo
line 1nline 2n
$ od -vAn -tc file.txt 
   l   i   n   e       1  n   l   i   n   e       2  n

您可以尝试从 stdin 或文件中管道化字符串并修剪所需的模式......

试试这个:

cat file|tr 'n' ' '

其中 file 是带有 的文件名。这将返回一个字符串,其中包含一行中的所有文本。

如果要将结果写入文件,只需重定向命令的结果,如下所示。

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

这是另一个例子:如何在 Bash 中从字符串中删除回车符

最新更新