如何过滤文件名中包含公共部分并包含一些文本的文件列表?

时间:2017-07-14 10:20:26

标签: regex grep

以下命令正常工作,并为我提供了包含内容中某些文字的文件列表 -

grep -rl "Text in content" .

以下命令也可以正常工作,并为我提供文件名中包含两个文本段的所有文件的列表 -

ls -lrth | grep "profiling" | grep "20170714_07"

所以,我试图将第二秒的输出输出到第一个命令的输入 -

ls -lrth | grep "profiling" | grep "20170714_07" | grep -rl "aerospike" .

但是,我在输出中也得到以下文件,它不包含“profiling”和“20170714_07” -

./aero_debug_10_20170714.log

请帮助,我是grep的新手。

1 个答案:

答案 0 :(得分:0)

要使用单个命令执行此操作,您需要的不仅仅是grep。如果您在提供xargs命令的Unix环境中,则可以执行以下操作:

ls -1 | grep "profiling" | grep "20170714_07" | xargs grep "aerospike"

xargs获取文件名列表(每行一个,这就是ls命令更改为ls -1的原因,grep "aerospace"仅列出该表单中的文件名),然后执行每个文件后面的命令(在本例中为find)。

注意:如果文件名中包含空格,您可以考虑使用其他命令来解决问题:find . -name "*profiling*20170714_07*" -print0 | xargs -0 grep "aerospike" ,命令行类似于以下内容:

-name

(唯一的问题是,这不会找到日期字符串首先在文件名中的文件名,但您可以使用find命令中的另一个try { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); return dateFormat.format(new Date()); // Find todays date } catch (Exception e) { e.printStackTrace(); return null; } 选项来搜索那些需要)。