在 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 中从字符串中删除回车符