我有一個大的文本文件,我想看看在這個文本文件包含"time spent"
行,我用:如何在指定的行號後擦寫一個字符串?
grep -in "time spent" myfile.txt
但我50000在輸出後,我感興趣的只是行我想看到50000之後的行幷包含「花費的時間」。有沒有辦法做到這一點?
我有一個大的文本文件,我想看看在這個文本文件包含"time spent"
行,我用:如何在指定的行號後擦寫一個字符串?
grep -in "time spent" myfile.txt
但我50000在輸出後,我感興趣的只是行我想看到50000之後的行幷包含「花費的時間」。有沒有辦法做到這一點?
您可以尾巴,然後grep的:
tail -n +50000 myfile.txt | grep -in "time spent"
或者您可以使用sed
。 sed
可以用來模仿grep
這樣的:
sed -n 's/pattern/&/p'
默認情況下sed
打印每行即使沒有發生替換。 -n
和/p
的組合使sed
僅打印發生替換的行。最後,我們將pattern
替換爲&
,這意味着自己替換pattern
。結果:我們只是模仿grep
。
現在sed
可以採取一系列行動。你的情況:
sed -n '50000,$s/time spent/&/p' myfile.txt
的格式指定範圍如下:start,end
我們只是指示SED從線50000工作$
這意味着最後一道防線。
接受的答案是正確的。請注意,'tail -n + 2'(從第2行開始的所有行)與'tail -n 2'(僅最後2行)非常不同。 – user113215
是的,我沒有明白。很高興知道,謝謝你指出 – neric
我喜歡sed方法。只需要一個程序,不需要管道。 – gkephorus
你可以使用head
+ grep
和組{...}
所以命令,它們共享相同的輸入:
{ head -n 50000 >/dev/null; grep -i PATTERN; } < infile
head
不消耗整個輸入,它只有第50000行,並將它們轉儲/dev/null
;其餘行由grep
處理。
如果你需要預先考慮(像grep -in
)的行號,你可以使用awk
:
awk 'NR>50000 && tolower($0)~/PATTERN/{print NR ": " $0}' infile
回答任何2行號之間grepping:
Using sed and grep:
sed -n '1,50000p' someFile | grep <your_string>
不會因爲工作這麼好它會擾亂行號 – BeniBela
請注意'+'號。它接縫沒用,但它意味着別的東西不是尾巴-n 50000,這意味着:從50000行開始的尾巴iso 50000線 – gkephorus