sed: -e 표현식 #1, 문자 35: 끝나지 않은 's' 명령

sed: -e 표현식 #1, 문자 35: 끝나지 않은 's' 명령

다음과 같은 줄이 포함된 텍스트 파일이 있습니다.

SET @@GLOBAL.GTID_PURGED='abae51b1-e1dc-11e8-bfd0-5665b72f6318:1-12559259';

sed를 사용하여 해당 줄을 삭제하고 싶습니다. 문자열(예: GTID_PURGED)을 일치시킬 수 있지만 세미콜론( ) 앞의 나머지 문자열과 일치하지 않기 때문에 부분적으로 작동하도록 했습니다 ;.이것은 내 정규식입니다.:

(SET @@GLOBAL.GTID_PURGED=.*?\;)

이것은 오류를 생성하는 완전한 명령입니다.

sed -i 's/(SET @@GLOBAL.GTID_PURGED=.*?\;)/' test.sql

답변1

이 줄을 삭제하고 싶어요

s/pattern/replacement/sed패턴을 교체로 바꾸는 명령 입니다 . 그러나 당신은 대체물을 제공하지 않습니다.
행을 삭제하려면 가 필요합니다 sed -i '/pattern/d'.

추가 팁:

  • 와 함께 확장 정규 표현식을 사용하지 않는 한 sed괄호를 이스케이프해야 합니다. 삭제 명령의 경우 대괄호는 쓸모가 없으므로 제거해야 합니다.
  • posix 정규식은 non-greedy 수정자( )에 대해 알지 못합니다 ?. 은 (는) 특수 문자가 아니므로 이스케이프할 필요 가 .*;없습니다 .[^;]*;.*?\;;

답변2

s/일치 항목을 바꾸는 데 사용되며 예제의 마지막 문자열 뒤에 대체 문자열이 없습니다.

해당 줄만 삭제하려면 처음 d이 아닌 끝 부분에서 사용하세요 .s

sed -i '/match/d' filename

관련 정보