Grep
如何挑選標題包含特定文本的文件夾中的文件?
案例:假設有一個充滿大型 RDF+XML 文件的文件夾,它們遵循不同的命名空間。我們希望找到遵循給定名稱空間的那些文件(例如
xmlns:crm="http://www.cidoc-crm.org/cidoc-crm#"
)。從上到下掃描文件非常耗時,因為名稱空間總是在 XML 文件的前幾行中定義。
如何在標題包含特定文本的海量文件夾中挑選文件?
答案看起來像這樣:
awk '/hi/ { if (FNR >= 5) { nextfile }; print FNR, FILENAME }' *
/hi/
使用您的正則表達式匹配字元串更改。將 更改為5
您要查看的標題中的最後一個行號。
僅查看前 5 行,如果您
awk
支持nextfile
:TEXT='xmlns:crm="http://www.cidoc-crm.org/cidoc-crm#"' \ find . -type f -exec awk ' index($0, ENVIRON["TEXT"]) {print FILENAME; nextfile} FNR == 5 {nextfile}' {} +
(如果你
awk
不支持nextfile
,那將被默默地忽略,文件將被完全讀取)。或者你可以使用
perl
:TEXT='xmlns:crm="http://www.cidoc-crm.org/cidoc-crm#"' \ find . -type f -exec perl -Tne ' if (index($_, $ENV{"TEXT"}) >= 0) {print "$ARGV\n"; close ARGV} elsif ($. == 5) {close ARGV}' {} +