パターンを検索して最初の2行だけを置き換え、残りを削除してください。

パターンを検索して最初の2行だけを置き換え、残りを削除してください。

「class」で始まる不明な行数を含むファイルがあります。 「class」で始まる最初の2行を別のものに置き換え、その2行だけを残し、残りを削除したいと思います。

例:

school 
class A
class B
class C
class D
classroom

希望の出力:

school
class X
class Y
classroom

sedを見ていますが、良い解決策が見つかりませんでした。どんなアドバイスもありがとうございました!

ベストアンサー1

使用GNU sed正規表現パターンを拡張して、予約済み-Eスペースをカウンターとして使用できます。

sed -Ee '
  /^class(\s|$)/!b
  G
  /\n{3}/d
  /\n{2}/s/.*/class Y/
  /\n{1}/s/.*/class X/
  p;z;H;d
' file

簡単な説明:

  • 使用されたコマンドの編集sedb G z h H d s/// p
  • これについてはGNU sedのマニュアルを参照してください。
  • アイデアは、単語クラスで始まらないすべての行を印刷し続けることです。
  • 今、階級線については一度見たのか、二度見たのか、二回以上見たのか、三つを明確にしなければなりません。
  • 私たちは予約されたスペースの内容をパターンスペースにリンクし、改行に細心の注意を払います。
  • 改行文字が3つ見つかると=>2回以上発生します。この行をすぐに削除してください。これ以上処理されません。
  • 2つの改行が見つかると=> 2番目に表示されますので変更してください。
  • 最初の出会いではまた別の変化も生じた。
  • 最後の2つのケースのいずれかについては、予約済みスペースを増やしてください。

とともにアッ実用性は簡単です。

awk '
  BEGIN {
    a[1]="class X"
    a[2]="class Y"
  }
  $1 == "class" {
    if ( k++ < 2 ) {
      $0 = a[k]
    } else { next }
  }1
' file

出力:

school 
class X
class Y
classroom

おすすめ記事