Text-Processing

從文件中查找整行匹配的文件

  • April 7, 2021

我有一個包含以下內容的文件:

$ cat compromised_header.txt
some unique string 1
some other unique string 2
another unique string 3

我想找到所有文件的所有行都以相同的順序排列,並且這些行之間沒有中間行。

範例輸入文件:

$ cat a-compromised-file.txt
some unique string 1
some other unique string 2
another unique string 3
unrelated line x
unrelated line y
unrelated line z

我嘗試使用以下grep

grep -rlf compromised_header.txt dir/

但我不確定它是否會提供預期的文件,因為它也會匹配此文件:

some unique string 1
unrelated line x
unrelated line y
unrelated line z

使用支持的 awk nextfile

NR == FNR {
 a[++n]=$0; next
}
$0 != a[c+1] && (--c || $0!=a[c+1]) {
 c=0; next
}
++c >= n {
 print FILENAME; c=0; nextfile
}

用於find遞歸:

find dir -type f -exec gawk -f above.awk compromised_header.txt {} +

或者這可能有效:

pcregrep -rxlM "$( perl -lpe '$_=quotemeta' compromised_header.txt )" dir

使用 perl 轉義元字元,因為 pcregrep 似乎沒有--fixed-strings--multiline.

在 slurp 模式下使用 perl(不適用於太大而無法保存在記憶體中的文件):

find dir -type f -exec perl -n0777E 'BEGIN {$f=<>} say $ARGV if /^\Q$f/m
' compromised_header.txt {} +

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