GNU/Linux >> Linux の 問題 >  >> Linux

sed - 一致後に X 行の後に行を挿入する

sed '/function_1(/,/^[[:space:]]*}/ {
 ,/^[[:space:]]*}/ a\
Line that\
you want to\
insert (append) here
   }' YourFile
  • } の後に次の行を挿入します function_1( で始まるセクションから (最終的には前にいくつかのスペースがある行に単独で)
  • } はないと思います サンプルのように内部コードで単独

関数名に基づく選択には注意してください。これは、他のコード セクションで関数自体の呼び出しとして使用される可能性があるため (通常は使用されます)、おそらく /^void function_1()$/ 良い


数えないで、マッチしてください:

sed -e '/^void function_1()/,/^}$/ { /^}$/a\
TEXT TO INSERT
}' input

これは、宣言と右中括弧の間のブロックを調べ、右中括弧の後に TEXT_TO_INSERT を追加します。


awk を使用:

awk '1;/function_1/{c=4}c&&!--c{print "new text"}' file
  • 1 {print} の短縮形です 、したがって、ファイル内のすべての行が印刷されます
  • パターンが一致した場合、c を設定します 4まで
  • cのとき 1 に達する (だから c 真であり、!--c true)、行を挿入

!--c を使用できます c のチェックを追加します true は c も意味します 0 を超えて減少し続けることはありません。


GNU sed でこれを試してください:

sed "/function_1/{N;N;N;a new_text
}" filename

Linux
  1. ファイルの最初の行の前にテキストを挿入する方法は?

  2. 各行でN番目の一致が見つかった後のパターンの置き換え??

  3. 行の範囲を行の範囲(sedまたはその他)に置き換えますか?

  1. Grep一致後のファイルの行数をカウントする方法は?

  2. 最初の一致でのみ挿入する sed

  3. sed を使用して二重の空行のみを削除するには?

  1. sed 特定の行にスペースを含む挿入行

  2. シェルスクリプトを使用して、指定されたパターンの後にファイルに複数の行を挿入します

  3. sed を使用してファイルの 1 行目にテキストを挿入するにはどうすればよいですか?