我遇到了这个命令
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
可能会警告未实现的功能。