Answers:
sed 's/.$//'
删除最后一个字符。
但是在这种情况下,您也可以这样做:
df -P | awk 'NR > 1 {print $5+0}'
使用算术表达式($5+0
),我们强制awk
将第5个字段解释为一个数字,该数字之后的任何内容都将被忽略。
请注意,还可以告诉GNU df
(您-h
已经是GNU扩展,虽然这里不需要),但它也只能输出磁盘使用百分比:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(tail跳过标题,tr删除除数字和行定界符以外的所有内容)。
在Linux上,另请参见:
findmnt -no USE%
{print +$5}
也会正常工作
awk
实现方式不起作用,+
一元运算符只是被忽略并且不会强制将字符串转换为数值。
使用sed
,这很容易:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
语法为s(ubstitute)/search/replacestring/
。在.
表示任意字符,并且$
所述线的端部。因此.$
将仅删除最后一个字符。
在这种情况下,您的完整命令应如下所示:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
是多余的:可以在以下位置进行awk
:df -h | awk '{gsub(/%/,""); print $5}'
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
该方法是正确的答案,可以使该行中的所有内容都达到第一个'%'。
sed -ie '$d' filename
here -i is to write changes
e means expression
$ means last line
d means delete
Note:Without -e option $ wont work
可选:要删除第一行和最后一行,请使用sed -ie '1d;$d'
文件名
%
标志吗?