2017-06-05 55 views
0

我想找到遞歸的方式有些特殊文本的特定文本遞歸查找,我看了這個非常普遍的回答:爲最後n行

grep -rnw '/path/to/somewhere/' -e 'pattern' 

但它不工作,我由於我有文件巨大,可能需要很長時間才能找到整個文件,所以我只想在最後N行搜索以提高執行動作所需的性能和時間,例如:

+0

你可以這樣做,但是這種變體會丟失行號:'find'/ path/to/somewhere /'-type f | xargs尾巴| grep -ew'pattern'' – Yury

+0

我可以在-n參數中添加尾部嗎? –

回答

0

此代碼將打印全部文件,每個文件名後匹配的字符串將被打印。你可以玩參數來製作你想要的東西。例如,如果您移動-print到最後,那麼只有匹配的文件將被打印(但是匹配的字符串後)

find /path/to/somewhere/ -type f -print -exec bash -c "cat -n {} | tail | grep -we pattern" \; 
+0

我可以在哪裏設置lineS的數量? –

0

我會用GNU's parallelbash,並tail

my_tail_grep() { 
    file="$1" 
    pattern="$2" 
    N="${3:-100}" # Optional -- defaults to 100 
    res=$(tail -n "$N" "$file" | grep -we "$pattern") 
    [[ -n "$res" ]] && echo -e "${file}\n${res}" || : 
} 

export -f my_tail_grep # Necessary for parallel 

find /path -type f | parallel my_tail_grep {} "$pattern" 100 
0

使用find命令經由n參數指定最後N行

n=11 
find /path/to/somewhere/ -type f -exec sh -c 'tail -n '$n' {} | grep -wn pattern' \; -print 
+0

它看起來幾乎是我想要的,它不是打印文件的文本在哪裏 –

+0

@DanielHernández,你沒有在你的問題中提到。查看我的更新 – RomanPerekhrest