我想找到递归的方式有些特殊文本的特定文本递归查找,我看了这个非常普遍的回答:为最后n行
grep -rnw '/path/to/somewhere/' -e 'pattern'
但它不工作,我由于我有文件巨大,可能需要很长时间才能找到整个文件,所以我只想在最后N行搜索以提高执行动作所需的性能和时间,例如:
我想找到递归的方式有些特殊文本的特定文本递归查找,我看了这个非常普遍的回答:为最后n行
grep -rnw '/path/to/somewhere/' -e 'pattern'
但它不工作,我由于我有文件巨大,可能需要很长时间才能找到整个文件,所以我只想在最后N行搜索以提高执行动作所需的性能和时间,例如:
此代码将打印全部文件,每个文件名后匹配的字符串将被打印。你可以玩参数来制作你想要的东西。例如,如果您移动-print到最后,那么只有匹配的文件将被打印(但是匹配的字符串后)
find /path/to/somewhere/ -type f -print -exec bash -c "cat -n {} | tail | grep -we pattern" \;
我可以在哪里设置lineS的数量? –
我会用GNU's parallel
,bash
,并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
使用find
命令经由n
参数指定最后N行:
n=11
find /path/to/somewhere/ -type f -exec sh -c 'tail -n '$n' {} | grep -wn pattern' \; -print
它看起来几乎是我想要的,它不是打印文件的文本在哪里 –
@DanielHernández,你没有在你的问题中提到。查看我的更新 – RomanPerekhrest
你可以这样做,但是这种变体会丢失行号:'find'/ path/to/somewhere /'-type f | xargs尾巴| grep -ew'pattern'' – Yury
我可以在-n参数中添加尾部吗? –