如何只匹配匹配的正则表达式?

时间:2016-05-04 13:48:34

标签: regex grep find filenames

我使用以下命令在 dir 目录中的所有非空文本文件中写入 NotEmpty.txt 文件:

find dir/ -not -empty -ls | grep -E "*.txt" > NotEmpty.txt

我想只打印匹配的正则表达式而不是该行的所有信息。怎么可能?

2 个答案:

答案 0 :(得分:2)

问题是你正在针对每场比赛执行ls,因此输出包含很多东西。而是使用此find命令打印名称。

请注意,事实上,您可以一次性完成所有操作,包括仅选择.txt个文件:

find your_dir/ -not -empty -name "*.txt" -print > NotEmpty.txt
#                          ^^^^^^^^^^^^^ ^^^^^^
#                                 |         |
#                          just .txt files  |
#                                           |
#                               print its name instead of `ls`ing it

您也可以说-type f只检查文件,实际上我猜这是-not -empty参数所假设的。

答案 1 :(得分:1)

使用grep的-o参数指定您只需要匹配的部分。

示例:

$ echo foo bar baz | grep -o "foo"
foo