SOU*_*ser 6 bash echo newlines
可执行文件 (cURL) 的输出包含 \n。如何用换行符显示这样的输出?
假设一个可执行文件的输出是tCL\n1523 memo\n
,管道到 printf 不显示换行符。
$ echo "tCL\n1523 memo\n"
tCL\n1523 memo\n
$
$ printf "tCL\n1523 memo\n"
tCL
1523 memo
$
$ echo "tCL\n1523 memo\n" | xargs -0 printf '%s'
tCL\n1523 memo\n
$
$ echo "tCL\n1523 memo\n" | awk '{ printf "%s", $0 }
tCL\n1523 memo\n
Run Code Online (Sandbox Code Playgroud)
%s
不解释转义序列。你需要%b
:
% echo 'tCL\n1523 memo\n' | xargs -0 printf "%b"
tCL
1523 memo
%
Run Code Online (Sandbox Code Playgroud)
您可能还需要将双反斜杠转换为反斜杠,否则输入格式将不明确。
您可以编写一个 sed 脚本来翻译反斜杠字母转义。此脚本仅转换它识别的转义序列,否则会删除反斜杠。我已经支持换行符和制表符。
… | sed 's/\\n/\n/g; s/\\t/ /; s/\\\(.\)/\1/g'
Run Code Online (Sandbox Code Playgroud)
中的空格s/\\t/ /
是制表符。GNU sed 允许您编写s/\\t/\t/
.
如果您还需要八进制转义,请使用更高级的工具,例如 Perl。你可以让它解析它支持的所有转义序列。
… | perl -pe 's/\\([0-7]{1,3}|c.|[oxN]\{[^{}]+\}|.)/"\"\\${1}\""/eeg'
Run Code Online (Sandbox Code Playgroud)