当我在 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/