Files

如何獲取僅包含指定文本的文件的名稱

  • November 2, 2021

我有一個名為“labels”的目錄,其中有文本文件,其中包含“cat”或“dog”的標籤或兩者都在單獨的行上。

標籤目錄中的文件內容為:

cat labels/1.txt
cat

cat labels/2.txt
dog

cat labels/3.txt
cat  
dog

我想獲取僅包含標籤“cat”的文件的名稱。我嘗試了以下命令:

ls labels | grep -Rwl "cat"   
labels/1.txt  
labels/3.txt  

但是此命令返回包含“cat”或兩者的文件的名稱。但我的要求是獲取那些只包含“cat”而不是“cat”和“dog”的文件名。

同樣,當我嘗試獲取僅包含“dog”的那些文件的名稱時。如果我以相同的方式搜尋,那麼它會返回包含“dog”或兩個標籤的文件名。

ls labels | grep -Rwl "dog"
labels/2.txt  
labels/3.txt  

您可以使用grep兩次:a) 列出所有帶有 的文件cat,然後 b) 篩選出包含的文件dog。分別使用-l和列出匹配的文件名和不匹配的文件名:-L``-l``-L

grep -L 'dog' $(grep -l 'cat' <list of files>)

man grep

-L, –files-without-match

抑制正常輸出;而是列印通常不會列印輸出的每個輸入文件的名稱。掃描將在第一次匹配時停止。

-l, –files-with-matches

抑制正常輸出;而是列印通常會從中列印輸出的每個輸入文件的名稱。掃描將在第一次匹配時停止。

引用自:https://unix.stackexchange.com/questions/675621