当我在Bash中执行命令时(或者更确切地说,wc -l < log.txt),输出后包含一个换行符。我怎样才能摆脱它呢?
当前回答
如果你只想删除最后一个换行符,通过管道:
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变量替换中也直接支持空格移除:
testvar=$(wc -l < log.txt)
trailing_space_removed=${testvar%%[[:space:]]}
leading_space_removed=${testvar##[[:space:]]}
使用Awk:
awk -v ORS="" '1' log.txt
解释:
ORS的-v赋值 ORS -输出记录分隔符设置为空白。这将用""替换新行(输入记录分隔符)
Printf已经为你裁剪了后面的换行符:
$ printf '%s' $(wc -l < log.txt)
细节:
Printf将打印您的内容,以代替%s字符串占位符。 如果你不告诉它打印换行符(%s\n),它就不会打印。
如果你想在Bash中输出任何内容而不带行尾,可以使用-n开关进行回显。
如果你已经在变量中有它了,那么用后面的换行符进行回显:
$ testvar=$(wc -l < log.txt)
$ echo -n $testvar
或者你可以用一行来代替:
$ echo -n $(wc -l < log.txt)
如果你将它的输出赋值给一个变量,bash会自动删除空白:
linecount=`wc -l < log.txt`
推荐文章
- 检查bash变量是否等于0
- 只使用md5sum获取哈希值(没有文件名)
- 如何生成一个核心转储在Linux上的分段错误?
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 如何删除超过X小时的文件
- Visual Studio代码-在文件末尾插入换行符
- 如何创建Bash别名?
- 如何在JavaScript中跨越多行代码打破字符串?
- 将所有变量从一个shell脚本传递到另一个?
- 如何删除shell脚本中文件名的扩展名?
- 使用xargs调用shell函数
- 如何限制从grep返回的结果的数量?
- 'find -exec'是Linux中的shell函数
- 将值从管道读入shell变量
- 在Bash中重用上一个命令的输出