当我在Bash中执行命令时(或者更确切地说,wc -l < log.txt),输出后包含一个换行符。我怎样才能摆脱它呢?


当前回答

在Bash变量替换中也直接支持空格移除:

testvar=$(wc -l < log.txt)
trailing_space_removed=${testvar%%[[:space:]]}
leading_space_removed=${testvar##[[:space:]]}

其他回答

一个方法:

wc -l < log.txt | xargs echo -n

添加这个是为了我的参考,而不是其他任何东西^_^

还可以使用bash扩展魔术从输出中剥离新行

VAR=$'helloworld\n'

CLEANED="${VAR%$'\n'}"

echo "${CLEANED}"

如果你只想删除最后一个换行符,通过管道:

sed -z '$ s/\n$//'

如果通过-z将分隔符设置为NUL, sed将不会在流的结尾添加\0,而要创建一个POSIX文本文件(定义为以\n结尾),它将始终输出不带-z的最终\n。

Eg:

$ { echo foo; echo bar; } | sed -z '$ s/\n$//'; echo tender
foo
bartender

并证明没有NUL添加:

$ { echo foo; echo bar; } | sed -z '$ s/\n$//' | xxd
00000000: 666f 6f0a 6261 72                        foo.bar

要删除多个尾随换行符,请通过:

sed -Ez '$ s/\n+$//'

如果你将它的输出赋值给一个变量,bash会自动删除空白:

linecount=`wc -l < log.txt`

Printf已经为你裁剪了后面的换行符:

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

细节:

Printf将打印您的内容,以代替%s字符串占位符。 如果你不告诉它打印换行符(%s\n),它就不会打印。