다음 내용이 포함된 파일이 있습니다. 내가 해야 할 일은 필터링뿐이다변화스크립트에는고유한그 안에 키워드를 넣고 다른 파일로 옮기세요. . 을(를) 사용해 보았지만 sed -n '/ALTER TABLE/,/UNIQUE("ID");/p' file
작동하지 않았습니다.
ALTER TABLE RELEASE.ACL_ENTRY
ADD CONSTRAINT RELEASE.FK5111A
FOREIGN KEY( ACL_OID )
REFERENCES RELEASE.ACL ( OID )
ON DELETE CASCADE
--ON UPDATE NO ACTION ;
ALTER TABLE RELEASE.ACTION_DESC
ADD CONSTRAINT RELEASE.UN2160A
UNIQUE( ID_MASK ) ;
ALTER TABLE RELEASE.ACTION_DESC
ADD CONSTRAINT RELEASE.UN2160B
UNIQUE( NAME ) ;
ALTER TABLE RELEASE.ACTION_DESC_LOD
ADD CONSTRAINT RELEASE.FK2170
FOREIGN KEY( ACTION_DESC_OID )
REFERENCES RELEASE.ACTION_DESC ( OID )
ON DELETE CASCADE
--ON UPDATE NO ACTION ;
ALTER TABLE RELEASE.ACTION_SET
ADD CONSTRAINT RELEASE.UN2120A
UNIQUE( "ID" ) ;
ALTER TABLE RELEASE.ACTION_SET
ADD CONSTRAINT RELEASE.UN2120B
UNIQUE( NAME ) ;
ALTER TABLE RELEASE.ACTION_SET_LOD
ADD CONSTRAINT RELEASE.FK2150A
FOREIGN KEY( ACTION_SET_OID )
REFERENCES RELEASE.ACTION_SET ( OID )
ON DELETE CASCADE
--ON UPDATE NO ACTION ;
ALTER TABLE RELEASE.APP_DESC
ADD CONSTRAINT RELEASE.FK20A
FOREIGN KEY( WEB_MOD_OID )
REFERENCES RELEASE.WEB_MOD ( OID )
ON DELETE CASCADE
--ON UPDATE NO ACTION ;
ALTER TABLE RELEASE.APP_DESC
ADD CONSTRAINT RELEASE.CC20B
CHECK( ( WEB_MOD_OID IS NOT NULL ) AND ( WEB_MOD_SL IS NULL ) ) ;
출력은 다른 파일에서 다음과 유사해야 합니다.
ALTER TABLE RELEASE.ACTION_DESC
ADD CONSTRAINT RELEASE.UN2160A
UNIQUE( ID_MASK ) ;
ALTER TABLE RELEASE.ACTION_DESC
ADD CONSTRAINT RELEASE.UN2160B
UNIQUE( NAME ) ;
ALTER TABLE RELEASE.ACTION_SET
ADD CONSTRAINT RELEASE.UN2120A
UNIQUE( "ID" ) ;
ALTER TABLE RELEASE.ACTION_SET
ADD CONSTRAINT RELEASE.UN2120B
UNIQUE( NAME ) ;
답변1
cat inputfile | tr '\n' '@' | sed -e 's/;/;\n/g' | grep UNIQUE | tr '@' '\n'
답변2
sed
너만 합격할 수 있어
sed ':1;/ALTER/N;/;/!b1;/UNIQUE/!d' inputfile > outputfile
또는 패턴 공간을 사용하는 것과 동일
sed 'H;/ALTER/h;/;/x;/UNIQUE/!d' inputfile > outputfile
awk
또는 동일한 스타일을 사용할 수 있습니다 .
awk 'b{b=b "\n" $0}/ALTER/{b=$0}/;/{if(b~/UNIQUE/)print b;b=""}' inputfile