sed: -e 표현식 #1, 문자 44: 종료되지 않은 주소 정규 표현식

sed: -e 표현식 #1, 문자 44: 종료되지 않은 주소 정규 표현식

질문:

데비안 설치를 구성하기 위한 스크립트를 작성 중입니다.....DVD의 소스 목록에 있는 한 줄을 주석 처리해야 합니다. sed를 사용하려고 합니다. 줄을 제거하는 방법을 알고 있지만 원하는 줄이 있습니다. 주석 처리됩니다.

내가 가진 것은 이것입니다:

sed -i '/deb cdrom:[Debian GNU/Linux 9.4.0 _S/s/^/#/' /etc/apt/sources.list

하지만 다음과 같은 오류가 발생합니다.

sed: -e expression #1, char 44: unterminated address regex

아무래도 브라켓에 문제가 있는 것 같네요.

질문:

여기서 문제는 무엇이며 이 명령을 어떻게 수정할 수 있습니까? 그리고/또는 이를 수행할 수 있는 다른 방법이 있습니까?

답변1

이 시도,

  sed -i '/deb cdrom:\[Debian GNU\/Linux 9\.4\.0 _S/s/^/#/' /etc/apt/sources.list
  • [, /및 는 구분 기호이고 및 정규식 연산자이기 때문에 검색 패턴에서 이스케이프해야 합니다../[.

답변2

검색 문자열은 상수이고 정규식 메타 문자가 있으면 문제가 되므로 다음과 같이 이 작업을 수행할 수도 있습니다.

 awk -i inplace 'index($0, "deb cdrom:[Debian GNU/Linux 9.4.0 _S"){$0 = "#" $0}1' /etc/apt/sources.list

GNU awk 4.1.0이상을 사용하여 내부 편집 효과를 얻을 수 있다면 운이 좋을 것입니다. OTW, 다음과 같이 할 수 있습니다 Perl:

perl -pi -e 's/^/#/ if index($_, "deb cdrom:[Debian GNU/Linux 9.4.0 _S") + 1' /etc/apt/sources.list

관련 정보