2017-02-08 27 views
0

Ich habe unter Art des Inhalts in einer Datei. Ich mag schließende Klammer Symbol ersetzen ) nur, wenn es nach dem Muster erscheint REFERENCESersetzen ein Zeichen nach einem passenden Muster mit awk/sed

Bitte beachten Sie, dass das Symbol ) nicht am Ende der Leitung

cat file1  
ALTER TABLE mytable1 
     ADD (CONSTRAINT myconst1 FOREIGN KEY (fkeyid) 
          REFERENCES mytable2) ; 
ALTER TABLE mytable5 
     ADD (CONSTRAINT myconst1 FOREIGN KEY (fkeyid) 
          REFERENCES mytable6) 
; 

Wunsch Ausgang

ALTER TABLE mytable1 
     ADD (CONSTRAINT myconst1 FOREIGN KEY (fkeyid) 
          REFERENCES mytable2 ; 
ALTER TABLE mytable5 
     ADD (CONSTRAINT myconst1 FOREIGN KEY (fkeyid) 
          REFERENCES mytable6 
; 

sein müssen Ich probierte einige Dinge, aber kein Glück

+0

Können Sie nach Ihren Versuche? – Inian

+1

Bitte geben Sie einige Details oder Code, was Sie bisher versucht haben? – CodeChanger

Antwort

1

Mit sed:

sed 's/\(REFERENCE[^)]*\))/\1/' file 

Zeichenketten enthalten REFERENCE durch nicht ) Zeichen folgen bis und mit Ausnahme von neben ) Zeichen mit Rückreferenzierung erfasst und ausgegeben.

Fügen Sie die -i Fahne, um die Datei an seinem Platz zu bearbeiten:

sed -i 's/\(REFERENCE[^)]*\))/\1/' file 

Edit:

nur zu entfernen, wenn es keine Klammer Öffnung:

sed 's/\(REFERENCE[^(]*[^()]*\))/\1/' file 
+0

Dank viel SLePort, die wie ein Charme – DBPlayer

+0

jedoch habe ich in ein anderes Problem bald nach, das heißt, einige der Linien in Dateien, in denen wie unter ALTER TABLE myTable1 ADD (CONSTRAINT myconst1 FOREIGN KEY (fkeyid) BEZUG mytable2 (col1); in solchen Fällen möchte ich die beiden Klammern beibehalten, dh für die oben erwähnten 2 Zeilen sollte die Klammer nicht ersetzt werden, sie sollte nur ersetzt werden, wenn keine REFERENCES-Klausel nach der Klausel – DBPlayer

+0

erscheint. – SLePort

Verwandte Themen