Text-Processing
從文件中查找整行匹配的文件
我有一個包含以下內容的文件:
$ 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 {} +