2017-07-14 72 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選項來搜索這些文件名)。

相關問題