命令 du -xh / | grep -P "G\t" 解释了吗?

命令 du -xh / | grep -P "G\t" 解释了吗?

我遇到了这个命令

du -xh / | grep -P "G\t"

-P我对开关grep及其作用感兴趣。另外,谁能解释一下该"G\t"部分的作用吗?

请不要解释du -xh命令的基础知识grep

$ du -xh / | grep -P "G\t"
5.1G    /var/oracle/XE/datafile
5.1G    /var/oracle/XE
5.1G    /var/oracle
1.1G    /var/lib
6.9G    /var
1.9G    /opt/softwareag/webMethods/install/fix
1.9G    /opt/softwareag/webMethods/install
1.2G    /opt/softwareag/webMethods/Designer
1.3G    /opt/softwareag/webMethods/common
1.9G    /opt/softwareag/webMethods/CCE
1.2G    /opt/softwareag/webMethods/IntegrationServer/instances/default/replicate/salvage
3.0G    /opt/softwareag/webMethods/IntegrationServer/instances/default/replicate
2.3G    /opt/softwareag/webMethods/IntegrationServer/instances/default/packages
5.5G    /opt/softwareag/webMethods/IntegrationServer/instances/default
5.5G    /opt/softwareag/webMethods/IntegrationServer/instances
5.7G    /opt/softwareag/webMethods/IntegrationServer
16G     /opt/softwareag/webMethods
16G     /opt/softwareag
16G     /opt
1.1G    /usr/share
3.0G    /usr
11G     /u01/app/oracle/oradata/XE
11G     /u01/app/oracle/oradata
12G     /u01/app/oracle
12G     /u01/app
12G     /u01
39G     /

答案1

正如手册中所解释的grep-P允许使用 PCRE,即 Perl 兼容正则表达式。

PCRE 表达式G\t匹配G后跟一个制表符。

其效果是,您只能获得大小以 GB 为单位(或其名称恰好与模式匹配)的目录列表。

更可靠的替代管道G仅匹配第一个制表符分隔列的末尾:

... | awk -F '\t' '$1 ~ /G$/'

您是否还想查看以小于或大于千兆字节的单位显示的条目,然后更改G[KMGTPEZY].

答案2

-P启用与 Perl 兼容的正则表达式引擎,这不是默认引擎。在您的示例中,需要将其\t视为制表符。

否则grep将认为它是普通的t(用 转义\)。


PS 你可以根据手册页轻松弄清楚这一点:

选项

 

    <...>
    匹配器选择
    <...>
    -P,--perl-regexp
      将该模式解释为与 Perl 兼容的正则表达式 (PCRE)。这是实验性的并且grep -P可能会警告未实现的功能。

相关内容