ファイルから追加の置換のためにファイルの部分文字列を取得するLinuxコマンド

ファイルから追加の置換のためにファイルの部分文字列を取得するLinuxコマンド

a)「Sune」で始まる行の後の最初の「Kalle」行の前に「//VERSION 221204 NEW LINE」行を挿入しようとしています。

b)また、「すべての部分文字列」(単語)を取得し、それを使用して上記のa)に記載されている行のVERSIONを置き換える必要があります。したがって、上記の行は「//221204 NEW LINE」でなければなりません。

編集するファイルの例は次のとおりです。

アン

訪問者

Annika「すべての部分文字列」Anna(注:Annikaはファイル固有です。)

シグ

スネベラ

訪問者

注文する: sed '/Sune.*/,/Kalle/!b;/Kalle/i // VERSION 221204 NEW LINE' <file>

これが私が得たラインです。これまでとてもよかったです。

アン

訪問者

アニカ・リサ・アンナ

シグ

スネベラ

//バージョン221204新しい行

訪問者

しかし、私が望むのは、Lisa()をインポートしてVERSIONをそれに置き換えることです。したがって、新しい行は次のようになります。 // Lisa 221204 NEW LINE

これはLisaを得るために使用することができます。(<any substring>). | awk '/Annika /{print $(NF-1)}'

しかし、どのように組み合わせるのですか? 「リサ」を最初に獲得し、後で交換できるように何とか保存できますか?

ライナーがあれば大丈夫でしょう。 sed、awkなどのbashやLinuxコマンドが欲しい...

答え1

使用sed

sed -E '{

/Kalle/!{n;b}
:A /Annika/!{n;bA}
:B /Sune/!{N;bB}
/Annika[[:space:]]+([[:alpha:]]+).*/{
  s//&\n\n\/\/ \1 221204 NEW LINE/
 }

}' file

1本のライン:

sed -E '/Kalle/!{n;b}; :A /Annika/!{n;bA}; :B /Sune/!{N;bB}; /Annika[[:space:]]+([[:alpha:]]+).*/{s//&\n\n\/\/ \1 221204 NEW LINE/}' file

関連情報