如何从 bash 命令中获取子字符串

如何从 bash 命令中获取子字符串

给定从命令获得的以下子字符串df /dev/sdb1 | tail -n 1

/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData

我想从该字符串中提取195297177274%用于 bash 脚本中。

我知道我可以使用一些剪切命令或者其他命令,但是如果尺寸发生变化,它将不再起作用。

我也想过使用正则表达式或者其他什么东西,但我想要最推荐的方法。

提前致谢!

答案1

编辑答案

正如 @kevin 所述,您可以使用它awk来仅选择最后一行,并完全避免使用尾部END,如果您想一次打印两列,您可以这样做:

df /dev/sdb1 | awk 'END {print $2,$5}'
1952971772 74%

原始答案

您只能选择第二列:

$ df /dev/sdb1 | tail -1 | awk '{print $2}' 
1952971772

其中$2表示 TAB 分隔列的位置。您可以使用它,cut因为它只能处理一次 TAB 出现,而​​这里有多个 TAB 来分隔一列。

答案2

$ df /dev/sdb1 | awk '{ print $5 }' | tail -n 1

百分比和

$ df /dev/sdb1 | awk '{ print $2 }' | tail -n 1

尺寸。

没有tail

df /home | awk 'NR==2 { print $2 }'
df /home | awk 'NR==2 { print $5 }'

  • awk '{ print $2 }'
    获取第 2 列,其中多个分隔符计为 1。因此,对于您的系统,对于命令的第 1 部分,第 2 列始终是相同的。

  • NR给出正在处理的记录总数或行号。

相关内容