1

いくつかの行といくつかの数字を含むファイルがあります。特定の文字列の後のすべての行を削除したいのですが、文字列が「角​​度」であるとしましょう。角度の後のすべての行を削除したいのですが、次のように sed コマンドを使用してこれを行うことができます。

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

私の質問は、角度の後のすべての行を削除したいのですが、最後の 4 行を保持したいですか? どうすればsedでこれを行うことができますか?

4

5 に答える 5

1

以下はあなたのために働くはずです:

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

説明: ファイルを反転し、最初の 4 行を残して、目的のパターンが見つかるまですべてを削除します。結果を反転します。

于 2013-07-18T05:41:28.707 に答える
1

これはうまくいくかもしれません(GNU sed):

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

最初の行から string に遭遇するまでのすべての行を出力しますangles。次にwindow、4 行移動して、ファイルの最後に出力します。

于 2013-07-18T06:24:00.927 に答える
0
awk -v size=$(wc -l < file) '
    /angles/       { skip=1 }
    NR >= (size-4) { skip=0 }
    !skip
' file
于 2013-07-18T12:54:22.143 に答える
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
> 
于 2013-07-18T06:10:32.110 に答える