Você pode usar sed
para ambas as tarefas. Suporta os chamados "endereços", que podem ser expressões regulares:
sed -n -e '/^ALTER/,/;$/p' > another.file # Prints them,
sed -i~ -e '/^ALTER/,/;$/d' # Deletes them.
Por exemplo:
CREATE TABLE COMM.ACL_ENTRY (
ACL_OID CHAR(18) FOR BIT DATA NOT NULL ,
USER_DESC_TYPE FOR COLUMN USER_00001 BIGINT NOT NULL ,
USER_DESC_OID FOR COLUMN USER_00002 VARGRAPHIC(220) CCSID 13488 NOT NULL ,
ACTIONS BIGINT NOT NULL ,
CONSTRAINT COMM.PK5111 PRIMARY KEY( ACL_OID , USER_DESC_OID ) )
;
ALTER TABLE COMMUN.ACL_ENTRY
ADD CONSTRAINT COMM.FK5111A
FOREIGN KEY( ACL_OID )
REFERENCES COMM.ACL ( OID )
ON DELETE CASCADE
ON UPDATE NO ACTION ;
Como você pode ver no exemplo acima. Quero excluir as linhas que começam com a palavra ALTER
até que ela termine com um padrão específico ;
e imprima as linhas excluídas em outro arquivo.
Tags text-processing sql awk sed shell-script