cut / grep 和 df -h

jst*_*err 5 grep scripting cut

如何 grep 或剪切“Verf”下的“173G”?

我需要这个用于学校的 Unix 脚本。

jonas@jonaspc:~/$ df -h /dev/sda2
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda2       293G    121G  173G   42% /media/Windows
Run Code Online (Sandbox Code Playgroud)

man*_*ork 7

此类任务最舒适的解决方案是awk

df -h /dev/sda2 | awk 'NR==2{print$4}'
Run Code Online (Sandbox Code Playgroud)

或者,如果列出了更多分区,您可以通过挂载点选择正确的行:

df -h | awk '$1=="/dev/sda2"{print$4}'
Run Code Online (Sandbox Code Playgroud)

也很简单sed,但如果您需要稍后对其进行调试,则不太好:

df -h /dev/sda2 | sed -rn '2s/^((\S+)\s+){4}.*/\2/p'

df -h | sed -rn '/^\/dev\/sda2/s/^((\S+)\s+){4}.*/\2/p'
Run Code Online (Sandbox Code Playgroud)

那假设 GNU sed。POSIX 兼容语法包括许多转义:

df -h /dev/sda2 | sed -n '2s/^\(\(\S\+\)\s\+\)\{4\}.*/\2/p'

df -h | sed -n '/^\/dev\/sda2/s/^\(\(\S\+\)\s\+\)\{4\}.*/\2/p'
Run Code Online (Sandbox Code Playgroud)


lyn*_*ynx 5

如果必须使用 grep 和 cut,可以执行以下操作:

df -h /dev/sda2 | grep sda | cut -d" " -f14
Run Code Online (Sandbox Code Playgroud)

但这非常难看,因为您必须计算空格(-f14)以及@manatwork 使用 awk 的原因。您可以使用tr或 其他工具使其更好,并能够指定您想要剪切的真实字段:

df -h /dev/sda2 | grep sda | tr -s " " " " | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)

或者,较新的 grep 仅支持输出部分匹配,您可以将其与 bash 技巧结合使用:

df -h /dev/sda2 | grep -o '[^[:space:]]*G' | cut -d$'\n' -f3
Run Code Online (Sandbox Code Playgroud)

正则表达式可能更安全,但这会找到所有大小字段并每行输出一个,而 cut 选择第二个。

  • 一个小点:你只需要 `tr -s " "`,除非你想将剩余空间更改为其他内容.... (+1),但 `-f2` 应该是 `-f3` (2认同)