2016-01-12 97 views

回答

1

使用sed的

sed '/str/{x;//q;x;h}' file 

... 
str 
... 
str 
+0

優秀!我仔細閱讀手冊頁)) – kate

+0

@kate沒問題,如果你什麼都不懂就問:) – 123

+1

如果第二個'str'存在,這將重複第一個'str'作爲最後一行的行。也許'sed'/ str/{x; // {x; q}; x; h}'file'更安全? – potong

0

一種方式:

awk '/str/ && f{print;exit}/str/{f=1}1' f=0 file 

當/ STR /遇到第一時間,變量設置爲1,並保持印刷。下次遇到時,打印行並停止執行。

0

另一種方式,計數比賽並退出第二場比賽。打印其他行。

awk 'BEGIN {m=0}; {print}; /str/ {m++; if (m == 2) { exit; } }' file 
3

取決於你有沒有在你的問題中所述的要求,這可能是你想要什麼:

$ awk '1; /str/&&c++{exit}' file 
... 
str 
... 
str 
1
awk '/str/{++i}7;i==2{exit}' file 

應該作品您的要求。

它記錄變量i中的匹配計數,當計數==2退出處理。

+0

非常好,謝謝! – kate

1
sed '/str/{:second n; /str/q; b second}' myfile 

當SED發現第一個'str'時,啓動一個循環直到找到下一個循環。

更多細節在這裏:SED loop match

+0

這很好,謝謝! – kate

0

如果Perl是一種選擇:

perl -pe '$m++ if /str/; exit if $m==2' file 

計數匹配。如果匹配==,則退出。

相關問題