2013-07-18 43 views
1

我有文件,其中包含一些行和一些數字。我想刪除特定字符串後面的所有行,讓我們說這個字符串是'角度'。我想刪除的角度後,所有的線,我可以如下做到這一點使用sed命令:刪除一個字符串後的所有行,但最後幾個

sed -n '/angles/q;p' input file 

我的問題是,我想刪除的角度後,所有的行,但要保留最後四行?我如何在sed中做到這一點?

回答

1

以下應爲你工作:

tac inputfile | sed '5,/angles/d' | tac 

說明:反向文件,保持前4行和刪除一切,直到所需的圖案是encounterd。反轉結果。

+0

非常感謝你,它的工作原理 – user1407199

+0

@ user1407199 http://stackoverflow.com/help/someone-answers – devnull

+0

這是否刪除有圖案的線? – potong

0

在awk中:

awk '{ 
    if(p!=1)print; 
    else{a[NR]=$0} 
    if($0~/angles/)p=1 
    } 
    END{ 
    for(i=NR-3;i<=NR;i++)print a[i] 
    }' your_file 

如下測試:

> cat temp 
wbj 
ergthet 
gheheh 
wergergkn angles gerg 
er 
ergnmer 
rgnerk 
1 
2 
3 
4 
> awk '{if(p!=1)print;else{a[NR]=$0};if($0~/angles/)p=1}END{for(i=NR-3;i<=NR;i++)print a[i]}' temp 
wbj 
ergthet 
gheheh 
wergergkn angles gerg 
1 
2 
3 
4 
> 
+0

空格字符這些日子相當便宜.... –

1

這可能爲你工作(GNU SED):

sed '1,/angles/b;:a;$!{N;s/\n/&/4;Ta;D}' file 

打印出所有的線從第一至遇到字符串angles。然後製作四行移動window並在文件結尾打印它們。

0
awk -v size=$(wc -l < file) ' 
    /angles/  { skip=1 } 
    NR >= (size-4) { skip=0 } 
    !skip 
' file 
0

我打算假設您要查找的字符串可能會多次出現,而您只希望達到第一個字符串。如果是這樣,扭轉文件並不是最好的策略。

{ sed '/angles/q' file; tail -4 file; } > result 
相關問題