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'