Shell

檢查列表中的哪些字元串永遠不會出現在目錄的遞歸搜尋中

  • March 29, 2019

我有一個字元串列表stringList,我想在其中遞歸搜尋一個目錄並找到所有沒有出現在任何搜尋結果中stringList字元串。現在,我有

cat stringList | grep -qrf /dev/stdin .

但後來我不知道該去哪裡。

例如我有字元串

酒吧

根據

目錄中的文件中只存在 foo。腳本應該返回

酒吧

根據

嘗試:

string="foo
bar
baz"
echo "$string" | grep -v "$(find . -type f -exec cat {} + | grep -o "$string")"

選擇這種方法是因為它只讀取輸入文件一次。

這個怎麼運作

  • find . -type f -exec cat {} +

這將對文件進行遞歸搜尋並將其內容列印到標準輸出。

  • grep -o "$string"

這將選擇任何與 的行匹配的文本$string

  • echo "$string" | grep -v "$(find . -type f -exec cat {} + | grep -o "$string")"

grep -v返回在遞歸搜尋的文件之一中找不到的字元串中的任何行。

例子

考慮一個目錄,其下包含以下文件:

$ find . -type f -exec cat {} +
bar none
Here baz scaggs
behind bars
bazooka

如果我們添加 grep,我們只會得到匹配的單詞:

$ find . -type f -exec cat {} + | grep -o "$string"
bar
baz
bar
baz

綜上所述,我們確定這foo是文件中唯一沒有的詞:

$ echo "$string" | grep -v "$(find . -type f -exec cat {} + | grep -o "$string")"
foo

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