Shell-Script

在目錄中搜尋多行字元串

  • February 4, 2016

尋找一種方法來遞歸搜尋包含多行字元串的所有文件的儲存庫並返回包含它的文件名。該段落只是一個大約 30 行的標題。所以我知道pcregrep可以進行多行搜尋。但是你需要把整個表達式放進去。因為這是我正在尋找的一個很長的段落,我想把它放在變數中,然後對那個變數做一個 grep 。所以基本上它會是find . -name "*.[ch]" | xargs pcregrep -M $paragraph但是這不起作用任何人都可以指出我正確的方向。

由於您正在嘗試匹配文件的前 30 行,因此您可以將文本保存在文件中,例如ref_file,然後使用diff將參考文件與每個文件中的前 30 行進行比較:

find . -name "*.[ch]" -exec ./myscript {} \; -print

./myscript在哪裡

#!/bin/sh

head -n 30 "$1" | diff - /path/to/ref_file >/dev/null

所以-print在第一個命令中,只有在前一個-exec評估為true時才會執行,也就是說,如果參考文件和目前文件的前 30 行之間沒有區別。

或者,如果您更喜歡不使用腳本並將文件名保存在logfile

find . -type f -exec sh -c 'head -n 30 "$0" | diff - /path/to/ref_file >/dev/null' {} \; -print >logfile

請注意,這假設您正在尋找完全匹配,否則以diff退出1,即使差異是一個空格。

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