Bash:从输出中去除尾随换行符

标签 bash newline line-breaks

当我在 Bash 中执行命令时(或者更具体地说,wc -l < log.txt),输出后包含一个换行符。我该如何摆脱它?

最佳答案

如果您的预期输出是单行,您可以简单地从输出中删除所有换行符。管道连接到 tr 实用程序或 Perl(如果愿意)的情况并不少见:

wc -l < log.txt | tr -d '\n'

wc -l < log.txt | perl -pe 'chomp'

您还可以使用命令替换来删除结尾的换行符:

echo -n "$(wc -l < log.txt)"

printf "%s" "$(wc -l < log.txt)"

如果您的预期输出可能包含多行,您需要做出另一个决定:

如果要从文件末尾删除多个换行符,请再次使用 cmd 替换:

printf "%s" "$(< log.txt)"

如果您想从文件中严格删除最后一个换行符,请使用 Perl:

perl -pe 'chomp if eof' log.txt

请注意,如果您确定要删除结尾的换行符,则可以使用 GNU coreutils 中的 head 来选择除最后一个字节之外的所有内容。这应该很快:

head -c -1 log.txt

此外,为了完整起见,您可以使用 cat 和“show-all”标志 -A 快速检查文件中的换行符(或其他特殊字符)的位置>。美元符号字符将指示每行的结尾:

cat -A log.txt

关于Bash:从输出中去除尾随换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12524308/

相关文章:

使用不间断空格和多行显示 NSAttributedString 时出现 Swift 错误

php - 为什么在以下情况下 echo 后没有插入换行符?

python - 如何防止 vim 破坏字符串文字?

linux - bash find 命令没有给出我期望的输出

从 cron 运行的 Bash 脚本

linux - 如何避免 sudo 字,用于由非 root 用户执行更高权限的命令

c - C 如何在不更改为 CR LF 的情况下将 LF 输出到标准输出?

string - Qml 文本换行

bash - 在 shell 中检查音频文件是否有效作为 MP3

ruby - 评论限制