我想找到遞歸的方式有些特殊文本的特定文本遞歸查找,我看了這個非常普遍的回答:爲最後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參數中添加尾部嗎? –