Bash:从输出中去除尾随换行符
当我在Bash中执行命令(或者是具体的, wc -l < log.txt
)时,输出包含后面的换行符。 我如何摆脱它?
单程:
wc -l < log.txt | xargs echo -n
如果您的预期输出是单行 ,则可以简单地从输出中删除所有换行符。 将“tr”实用程序连接到Perl,如果是首选,则连接到Perl也不常见:
wc -l < log.txt | tr -d '\n' wc -l < log.txt | perl -pe 'chomp'
您也可以使用命令replace来删除尾随的换行符:
echo -n "$(wc -l < log.txt)" printf "%s" "$(wc -l < log.txt)"
请注意,我不同意OPselect接受答案的决定。 我相信应尽可能避免使用“xargs”。 是的,这是一个很酷的玩具。 不,你不需要这里
如果您的预期输出可能包含多行 ,则您需要做出另一个决定:
如果要从文件末尾删除多行换行符,请再次使用cmdreplace:
printf "%s" "$(< log.txt)"
如果要严格删除文件中的最后一个换行符,请使用Perl:
perl -pe 'chomp if eof' log.txt
请注意,如果您确定要删除末尾的换行符,则可以使用GNU coreutils中的“head”来select除最后一个字节之外的所有内容。 这应该是相当快的:
head -c -1 log.txt
此外,为了完整性,您可以使用'cat'和'show-all'标志快速检查文件中的换行符(或其他特殊字符)。 美元符号字符将指示每行的结尾:
cat -A log.txt
如果将其输出分配给一个variables, bash
自动删除空格:
linecount=`wc -l < log.txt`
在Bashvariablesreplace中,也直接支持空白去除:
testvar=$(wc -l < log.txt) trailing_space_removed=${testvar%%[[:space:]]} leading_space_removed=${testvar##[[:space:]]}
printf已经为你编制了最后的换行符:
$ printf '%s' $(wc -l < log.txt)
详情:
- printf将打印您的内容来代替
%s
string占位符。 - 如果你不告诉它打印一个换行符(
%s\n
),它不会。
如果你想在Bash中输出任何东西而不是行尾,你可以用-n
开关-n
。
如果你已经在一个variables中,然后回车与裁剪后的换行符 :
$ testvar=$(wc -l < log.txt) $ echo -n $testvar
或者你可以在一行中做,而不是:
$ echo -n $(wc -l < log.txt)