2012-10-28 31 views
13

我有一個大的文本文件,我想看看在這個文本文件包含"time spent"行,我用:如何在指定的行號後擦寫一個字符串?

grep -in "time spent" myfile.txt 

但我50000在輸出後,我感興趣的只是行我想看到50000之後的行幷包含「花費的時間」。有沒有辦法做到這一點?

回答

27

您可以尾巴,然後grep的:

tail -n +50000 myfile.txt | grep -in "time spent" 
+1

不會因爲工作這麼好它會擾亂行號 – BeniBela

+0

請注意'+'號。它接縫沒用,但它意味着別的東西不是尾巴-n 50000,這意味着:從50000行開始的尾巴iso 50000線 – gkephorus

4

或者您可以使用sedsed可以用來模仿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工作$這意味着最後一道防線。

+7

接受的答案是正確的。請注意,'tail -n + 2'(從第2行開始的所有行)與'tail -n 2'(僅最後2行)非常不同。 – user113215

+1

是的,我沒有明白。很高興知道,謝謝你指出 – neric

+1

我喜歡sed方法。只需要一個程序,不需要管道。 – gkephorus

1

你可以使用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

回答任何2行號之間grepping:

Using sed and grep: 

sed -n '1,50000p' someFile | grep <your_string> 
相關問題