パターンが一致したら、行をシェルの他の場所(別の一致の直前)に移動します。

パターンが一致したら、行をシェルの他の場所(別の一致の直前)に移動します。

問題を説明するために例を見てください。ファイルがあります。

AAA

BBB

CCC

DDD

EEE

FFF

ABAB

ACAC

GGG

HHH

試合後2行移動したいです。アバブ到着前DDD。したがって、変更されたファイルは次のようになります。

AAA

BBB

CCC

ABAB

ACAC

DDD

EEE

FFF

GGG

HHH

これを処理するための素晴らしい方法を探しており、可能な限りsedを使用することをお勧めします。

ベストアンサー1

注:あなたのデータがそうであると仮定します。いいえ各項目の間に空白行がある場合は、4行の問題を解決する必要があります++3

GNUの使用ed:

$ ed -s file <<EOF
/ABAB/,//+m?DDD?-
,p
q
EOF

どこ

  • /ABAB/,//+/ABAB/一連の行と前の一致の//1行を処理します。
  • m指定された行を次に移動します。
  • ?DDD?-前の行と一致し、DDD1行を減算します。
  • ,pバッファ全体を印刷します。

一行で、

printf '/ABAB/,//+m?DDD?-\n,p\nq\n' | ed -s file

そのfile場で編集するに,p\nq\n,wq\n勝つ意識とキューそれ)。

おすすめ記事