将换行符附加到命令输出

将换行符附加到命令输出

我有一个单行命令,它执行 curl 请求来检查服务器状态,然后将结果输出到日志文件。但问题是返回的结果没有换行符,因此当命令下次写入日志文件时,日志文件会混乱。

curl -s "http://myserver.com/api?param=1&param=2" | sudo tee -a /var/log/myserver.log

我喜欢将其保留为单行命令。欢迎提出任何建议。感谢您的时间。

答案1

使用echo,它将自动添加换行符:

echo "`curl -s "http://myserver.com/api?param=1&param=2"`" | sudo tee -a /var/log/myserver.log

或者,您可以尝试该-w选项,但我发现它会以某种方式将有趣的字符打印到控制台(但幸运的是不会打印到文件中):

curl -s "http://myserver.com/api?param=1&param=2" -w "\n" | sudo tee -a /var/log/myserver.log

答案2

最简单的方法是使用以下方法添加换行符echo

curl -s "http://myserver.com/api?param=1&param=2" | sudo tee -a /var/log/myserver.log && echo "" >> /var/log/myserver.log

答案3

我用awk 1它来表示(其中1只是一些计算结果为真的东西):

$ printf a|awk 1
a
$ printf a\\n|awk 1
a
$ 

它应该与 gawk、BWK awk/nawk(OS X 自带)和 mawk(Debian 自带)一起使用。可以sed -n p与 OS X 的 sed 一起使用,但不能与 GNU sed 一起使用。

仅限 Bash 的替代方案:

printf %s\\n "$(cat)"

请注意,$()从末尾删除所有换行符,例如echo $'a\n\n'|printf %s\\n "$(cat)"仅打印一个换行符。

您也可以printf %s\\n用替换echo,但例如x=-nene;echo "$x"在 Bash 中不会打印任何内容(除非xpg_echo启用了 POSIX 模式)。

答案4

使用 echo 的其他语法:

commands... | { cat; echo; } | ...

相关内容