パターン(動的反復可能)を行の先頭に移動します。

パターン(動的反復可能)を行の先頭に移動します。

パターンが連続して一度だけ現れると、出力が得られます。次のコマンドを使用します。

sed 's/\(.*\)\(\.T\/[^.]*\)/\2,\1/;s/\(.*\)\(\.X\/[^.]*\)/\2\1/' file

入力する:

1991/10/15,DFD.T/SDFDS.Z/9887/15MAR/DFC/I.X/918875797553.G/IUYT/1/453.H/LPJB
1991/10/15,DFD.T/RUDFR.Z/9887/15MAR/DFC/I.X/918875797554.G/IUYT/1/453.H/LPJB

予想出力:

.X/918875797553.T/SDFDS,1991/10/15,DFD.Z/9887/15MAR/DFC/I.G/IUYT/1/453.H/LPJB
.X/918875797554.T/RUDFR,1991/10/15,DFD.Z/9887/15MAR/DFC/I.G/IUYT/1/453.H/LPJB

しかし、数学パターンが動的に繰り返される場合は、楽観的な解決策を提案してください。

1991/10/15,SUN.T/IUDFW.Z/0136/15MAR/KWW/I.X/918875797554.X/918875797550.X/918875797558.G/PLMW/1/SPI.H/XZTK. 
1991/10/15,SUN.T/IUDFW.Q/0136/15SEP/KWW/I.X/918875797557.X/918875797550.X/918875797558.X/918875797559.W/PLMW/1/SPI.H/XZTK.
1991/10/15,SUN.T/BJYE.Z/0136/03MAR/KWW/I.X/918875797551.L/PLMW/1/SPI.H/XZTK.

以下の出力が必要です。

.X/918875797554.X/918875797550.X/9188757975581.T/IUDFW,991/10/15,SUN.Z/0136/15MAR/KWW/I.G/PLMW/1/SPI.H/XZTK. 
.X/918875797557.X/918875797550.X/918875797558.X/918875797559.T/IUDFW,1991/10/15,SUN.Q/0136/15SEP/KWW/I.W/PLMW/1/SPI.H/XZTK.
.X/918875797551.T/BJYE,1991/10/15,SUN.Z/0136/03MAR/KWW/I.L/PLMW/1/SPI.H/XZTK.

ベストアンサー1

このような問題の場合、余分なバックスラッシュと \{1,\} が正規表現の読みやすさに影響しないように、拡張正規表現モード (-E) で GNU sed を呼び出すことをお勧めします。また、移動するブロックを分離した後、s/// コマンドを複数回呼び出して一度に 1 ブロックずつ移動することでこれを行うことができます。

sed -Ee '
  s|\.T/[^.]+|\n&\n|
  s|(.*)\n(.*)\n|\2,\1|
  s|(\.X/[^.]+)+|\n&\n|
  s|(.*)\n(.*)\n|\2\1|
' file

添付: 先行スペースがタイプミスであると仮定します。また、出力がマルチモーダルシナリオの最初の行入力と一致しません。

おすすめ記事