Files
如何獲取僅包含指定文本的文件的名稱
我有一個名為“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
抑制正常輸出;而是列印通常會從中列印輸出的每個輸入文件的名稱。掃描將在第一次匹配時停止。