Grep

如何挑選標題包含特定文本的文件夾中的文件?

  • November 26, 2014

案例:假設有一個充滿大型 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}' {} +

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