2017-07-14 76 views
0

以下命令工作正常,并让我的文件包含内容的一些文字列表 -如何过滤文件名中含有公共部分并包含一些文本的文件列表?

grep -rl "Text in content" . 

下面的命令也能正常工作,并给了我所有的文件包含两个文本段的列表在文件名中 -

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

所以,我试图管第二第二的输出之上的第一命令的输入 -

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

但是,我得到的输出以下文件为好,不同时包含“分析”和“20170714_07” -

./aero_debug_10_20170714.log 

请帮帮忙,我使用grep一个新手。

+0

在''aerospike''后面加上一个'.',把它移开。 –

+0

这是因为我只想在当前目录中搜索。 –

+0

我想你正在搜索一下'ls'返回的列表。我怀疑你在这里需要'.'。我试过了,没有带来任何结果,但没有结果,它返回了预期的结果。请注意,您可能会尝试运行一个'grep'命令。如果'profiling'在'aerospike'之前出现,并且日期到了,则使用'ls -lrth | grep“profiling。* aerospike。* 20170714_07”' –

回答

0

要使用单个命令执行此操作,您将需要超过grep。如果你在Unix环境,提供了xargs命令的时候,你可以做到以下几点:

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" 

(唯一的问题是它不会在文件名中找到日期字符串的第一个文件名,但如果需要,您可以使用find命令中的另一个-name选项来搜索这些文件名)。

相关问题