特定の行の前の文字列を置き換える

特定の行の前の文字列を置き換える

次のファイルがあります。

ID_SOUR_CALENDAR BIGINT NOT NULL DEFAULT 0  COMPRESS 0 ,
UNIQUE PRIMARY INDEX ( CALENDAR_DATE );
ID ,
ID_SOUR ,
PRIMARY INDEX ( CALENDAR_DATE );

PRIMARYを含む行の前の行から「、」を「)」に変更したいと思います。

結果は次のとおりです。

ID_SOUR_CALENDAR BIGINT NOT NULL DEFAULT 0  COMPRESS 0 )
UNIQUE PRIMARY INDEX ( CALENDAR_DATE );
ID ,
ID_SOUR )
PRIMARY INDEX ( CALENDAR_DATE );

ベストアンサー1

使用GNU sed:

sed  'N;s/,\(\s*\n.*PRIMARY\)/)\1/;P;D' file

ID_SOUR_CALENDAR BIGINT NOT NULL DEFAULT 0  COMPRESS 0 )
UNIQUE PRIMARY INDEX ( CALENDAR_DATE );
ID ,
ID_SOUR )
PRIMARY INDEX ( CALENDAR_DATE );
  • N パターン空間に入力の次の行を読み取るか追加します。
  • P 現在のパターンスペースに最初に含まれている改行文字を印刷します。
  • D パターンスペースから最大最初に挿入された改行文字を削除します。次のサイクルを開始しますが、パターン空間にまだデータがある場合は、入力から読み取りをスキップします。

おすすめ記事