2017-02-08 5 views
0

У меня есть тип содержимого в файле. Я хочу, чтобы заменить символ закрывающей скобки ) только если он появляется после того, как шаблон REFERENCESзамена символа, найденного после соответствующего шаблона с использованием awk/sed

Пожалуйста, обратите внимание, что символ ) не должен быть в конце строки

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

Желаемая выходной

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

Я пробовал несколько вещей, но не повезло

+0

Вы можете оставить попытки? – Inian

+1

Просьба представить более подробную информацию или код, что вы пробовали до сих пор? – CodeChanger

ответ

1

С sed:

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

Строки, содержащие REFERENCE затем, не являющихся ) символов до и за исключением следующего ) символа захватываются и вывода с помощью обратной ссылки.

Добавить -i флаг редактировать файл в месте:

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

Edit:

Чтобы удалить только тогда, когда нет открывающей скобки:

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

Большое спасибо SLePort, который работал как шарм – DBPlayer

+0

, однако вскоре я попал в другую проблему, то есть некоторые строки в файлах, где ниже ALTER TABLE mytable1 ADD (CONSTRAINT myconst1 FOREIGN KEY (fkeyid) ССЫЛКИ mytable2 (col1), в таких случаях я хочу сохранить оба скобки, т. е. для вышеупомянутых двухстрочных скобок) не следует заменять, его следует заменить только в том случае, если не было открывающей скобки, появляющейся после пункта ССЫЛКИ – DBPlayer

+0

Я отредактировал свой ответ. – SLePort

Смежные вопросы