Bash 用grep提取信息

Bash 用grep提取信息,bash,du,Bash,Du,在我的Ubuntu 14.10服务器上,我需要检查位于以下位置的用户文件夹的大小: /home/docks/*userid* 我有点像bash新手,但我已经走到了这一步 du-csh/home/docks/userid | grep total将返回 16K总计 现在我真的不关心总数,所以我想进一步削减,只得到16K。我想在shell脚本中有一种相对简单的方法来实现这一点。如果有人能告诉我怎么做,我将不胜感激。一个简单的awk就可以完成这项工作,你不需要去找grep du -csh /home/

在我的Ubuntu 14.10服务器上,我需要检查位于以下位置的用户文件夹的大小:

/home/docks/*userid*

我有点像bash新手,但我已经走到了这一步


du-csh/home/docks/userid | grep total
将返回

16K总计


现在我真的不关心总数,所以我想进一步削减,只得到16K。我想在shell脚本中有一种相对简单的方法来实现这一点。如果有人能告诉我怎么做,我将不胜感激。

一个简单的awk就可以完成这项工作,你不需要去找grep

du -csh /home/docks/userid | awk '/total/{print $1}'

du -csh /home/docks/userid | grep -oP '\S+(?=\s+total\b)'

\S+
将匹配一个或多个非空格字符<代码>(?=\s+total\b)正向前瞻,它声明匹配后必须跟一个字符串
total
,后跟一个或多个空格字符。

当语言版本不同于英语且输出中的“total”字可能以不同的语言出现时,计算用户文件夹的大小可能会有问题

防止出现这种情况的小“黑客”(考虑到摘要总是作为
du
输出中的最后一行打印):

或者您可以使用:

du -sh /home/docks/userid | cut -f1

du-csh/home/docks/userid | grep total | cut-d“t”-f 1@MaximilianKindshofer-稍微更正一下:这应该是
cut-d\t-f 1
,因为空格字符有一个选项卡,而不是空格。是的,我没有先运行它,但是我看到du使用了tabs@DroidOS为什么要使用
-c
-s
du-sh
直接生成
total
,仅一行。所以只需使用
du-sh/path
然后剪切或awk@fedorqui-就像我说的,我是个狂欢节的新手
du-sh
产生类似于
25M的东西。
。我不确定那里是否有空白——从外观上看,既没有标签也没有空白。我尝试了
du-sh | cut-d“M”-f1
,它使用了一个稍微冒险的假设,即它总是会是M(不是K或G或什么)。当然,如果任何用户目录的名称包含“total”,这也会匹配,因此
awk'END{print$1}'
可能更合适。
du csh/home/docks/userid | awk'$2==“total”/{print$1}'
谢谢您的回答。正如我经常对自己所想的那样,如果没有Stackoverflow,我该怎么办呢@我接受你的回答,因为这是最简单的。尽管如此,能有这么多选择还是很好的。
du -csh /home/docks/userid | tail -n 1 | cut -f1
du -sh /home/docks/userid | cut -f1