我有文件,其中包含一些行和一些數字。我想刪除特定字符串後面的所有行,讓我們說這個字符串是'角度'。我想刪除的角度後,所有的線,我可以如下做到這一點使用sed命令:刪除一個字符串後的所有行,但最後幾個
sed -n '/angles/q;p' input file
我的問題是,我想刪除的角度後,所有的行,但要保留最後四行?我如何在sed中做到這一點?
我有文件,其中包含一些行和一些數字。我想刪除特定字符串後面的所有行,讓我們說這個字符串是'角度'。我想刪除的角度後,所有的線,我可以如下做到這一點使用sed命令:刪除一個字符串後的所有行,但最後幾個
sed -n '/angles/q;p' input file
我的問題是,我想刪除的角度後,所有的行,但要保留最後四行?我如何在sed中做到這一點?
以下應爲你工作:
tac inputfile | sed '5,/angles/d' | tac
說明:反向文件,保持前4行和刪除一切,直到所需的圖案是encounterd。反轉結果。
在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
>
空格字符這些日子相當便宜.... –
這可能爲你工作(GNU SED):
sed '1,/angles/b;:a;$!{N;s/\n/&/4;Ta;D}' file
打印出所有的線從第一至遇到字符串angles
。然後製作四行移動window
並在文件結尾打印它們。
awk -v size=$(wc -l < file) '
/angles/ { skip=1 }
NR >= (size-4) { skip=0 }
!skip
' file
我打算假設您要查找的字符串可能會多次出現,而您只希望達到第一個字符串。如果是這樣,扭轉文件並不是最好的策略。
{ sed '/angles/q' file; tail -4 file; } > result
非常感謝你,它的工作原理 – user1407199
@ user1407199 http://stackoverflow.com/help/someone-answers – devnull
這是否刪除有圖案的線? – potong