Shell-Script
在目錄中搜尋多行字元串
尋找一種方法來遞歸搜尋包含多行字元串的所有文件的儲存庫並返回包含它的文件名。該段落只是一個大約 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
所以
-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
,即使差異是一個空格。