sedを使用して行を別の場所に移動するには?

sedを使用して行を別の場所に移動するには?

sedを使用して行を別の場所に移動するには?

次のファイルを想像してみてください。

ligne
ligne
toto
tutu
titi

取得したい:

ligne
toto
tutu
titi
ligne 

既知のパターンは「tutu」で、ターゲット行番号は「2」で、移動したいテキストブロックの開始行番号もあります。

それで、すでに知っている特定の位置(2行目)にコピーしたいのです(最初の1行と連続1行)。

私は試した:

sed '2,5{ H ;d ; } ;  2{ p ; x ; }' file

ただし、「貼り付け」部分は機能しないため、次のように表示されます。

ligne

私は数値行にバッファを貼り付ける方法を本当に理解していません。

答え1

わかりました、書かれたとおりです。

$ sed -n '1p; 2h; 3,/tutu/N; /tutu/ N; ${G; p;}' file
ligne
toto
tutu
titi
ligne

答え2

sedではなくその先祖編集する:

  • 以下で与えられる範囲と一致します。
    • 検索tutu後に行を減算する
    • 検索tutu後の行の追加
  • mブロックを2行に移動します(2行後1)。
  • 保存と終了(w、、q

次に続く:

ed -s file <<< $'/tutu/-1,/tutu/+1m1\nw\nq'

関連情報