Linuxで行とその上の行を削除する方法は?

Linuxで行とその上の行を削除する方法は?

MySQLに対して次の出力を自動的に生成するスクリプトがあります。

ALTER TABLE TESTE3 
  ADD COLUMN nome2 VARCHAR(2) DEFAULT NULL;

--
-- Create table `TESTE10`
--
CREATE TABLE TESTE10 (
  ID INT(11) DEFAULT NULL,
  NOME VARCHAR(10) DEFAULT 'J',
  nome2 VARCHAR(2) DEFAULT NULL
);

--
-- Drop column `col2` from table `hihi`
--
ALTER TABLE hihi 
  DROP COLUMN col2;

データベースから何も削除せずに追加するだけです。

以下を削除する必要があります。

ALTER TABLE hihi 
  DROP COLUMN col2;

sed -i '/drop/Id' file_name_hereその行のみが削除されますDROP COLUMN col2。ただし、ALTER TABLE hihi上記の行()も削除する必要があります。

ベストアンサー1

awk次のいずれかを使用してくださいtac

$ tac file | awk '$1=="DROP"{c=2} !(c&&c--)' | tac
ALTER TABLE TESTE3
  ADD COLUMN nome2 VARCHAR(2) DEFAULT NULL;

--
-- Create table `TESTE10`
--
CREATE TABLE TESTE10 (
  ID INT(11) DEFAULT NULL,
  NOME VARCHAR(10) DEFAULT 'J',
  nome2 VARCHAR(2) DEFAULT NULL
);

--
-- Drop column `col2` from table `hihi`
--

バラより印刷には sed- または awk-a-line-follow-a-matching-pattern を使用します。使い方と同様のイディオムのc&&c--詳細。

または、ブロックの上のコメントを削除するには、c5(空白行の印刷)または6(空白行の削除)に設定するか、次のようにして空白行に削除できます。

$ tac file | awk '$1=="DROP"{f=1} !f{print} !NF{f=0}' | tac
ALTER TABLE TESTE3
  ADD COLUMN nome2 VARCHAR(2) DEFAULT NULL;

--
-- Create table `TESTE10`
--
CREATE TABLE TESTE10 (
  ID INT(11) DEFAULT NULL,
  NOME VARCHAR(10) DEFAULT 'J',
  nome2 VARCHAR(2) DEFAULT NULL
);

おすすめ記事