別のパターンを見つけた後に、パターンの最初の出現を見つけるために sed を使用する

別のパターンを見つけた後に、パターンの最初の出現を見つけるために sed を使用する

別のパターンが発生した後にのみ、コード行の最初の発生の前に何かを追加する方法はありますか? 自動生成されたコメント「// Group2」で区切られた「Group2」に対してのみ、addTween行をオフにしたいです(二重スラッシュコメントを先頭に追加します)。言い換えると、

  1. 「// Group2」の出現を検索
  2. Group2 のみの addTween 行にコメントを追加するには、sed を使用します。

入力ファイル:

// Group1
this.shape = new cjs.Shape();
this.shape.graphics.f().s("#663300").ss(1,1,1).p("EBHXAAAQAAW105QIQ06QJ9kAAQ9jAA05wJQ06wIAA21QAA2zU6wJQU5wIdjAAQdkAAU6QIQU5QJAAWzg");
this.shape.setTransform(1005.55,596.9);

this.shape_1 = new cjs.Shape();
this.shape_1.graphics.f("#E5CCFF").s().p("EgydAm9Q05wJAA20QAA2zU5wJQU6wIdjgBQdkABU5QIQU6QJAAWzQAAW006QJQ05QJ9kgBQ9jAB06wJg");
this.shape_1.setTransform(1005.55,596.9);

this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.shape_1},{t:this.shape}]}).wait(1));

// Group2
this.shape_2 = new cjs.Shape();
this.shape_2.graphics.f().s("#666600").ss(44.3,1,1).p("EhDmgf6MCHNAAAMAAAA/1MiHNAAAg");
this.shape_2.setTransform(833.25,400.65);

this.shape_3 = new cjs.Shape();
this.shape_3.graphics.f("#336699").s().p("EhDmAf7MAAAg/1MCHNAAAMAAAA/1g");
this.shape_3.setTransform(833.25,400.65);

this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.shape_3},{t:this.shape_2}]}).wait(1));

出力ファイル: (最後の行にコメントのダブルスラッシュが追加された点のみ変更点です)

// Group1

this.shape = new cjs.Shape();
this.shape.graphics.f().s("#663300").ss(1,1,1).p("EBHXAAAQAAW105QIQ06QJ9kAAQ9jAA05wJQ06wIAA21QAA2zU6wJQU5wIdjAAQdkAAU6QIQU5QJAAWzg");
this.shape.setTransform(1005.55,596.9);

this.shape_1 = new cjs.Shape();
this.shape_1.graphics.f("#E5CCFF").s().p("EgydAm9Q05wJAA20QAA2zU5wJQU6wIdjgBQdkABU5QIQU6QJAAWzQAAW006QJQ05QJ9kgBQ9jAB06wJg");
this.shape_1.setTransform(1005.55,596.9);

this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.shape_1},{t:this.shape}]}).wait(1));

// Group2

this.shape_2 = new cjs.Shape();
this.shape_2.graphics.f().s("#666600").ss(44.3,1,1).p("EhDmgf6MCHNAAAMAAAA/1MiHNAAAg");
this.shape_2.setTransform(833.25,400.65);

this.shape_3 = new cjs.Shape();
this.shape_3.graphics.f("#336699").s().p("EhDmAf7MAAAg/1MCHNAAAMAAAA/1g");
this.shape_3.setTransform(833.25,400.65);

//this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.shape_3},{t:this.shape_2}]}).wait(1));

答え1

sed '/\/\/ Group2/,/addTween/ s/^.*addTween/\/\/&/' file

// Group2これは、 と 次のの間のテキストを検索しaddTween//を含む行に追加しますaddTween

関連情報