2017-06-05 71 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