질문:
데비안 설치를 구성하기 위한 스크립트를 작성 중입니다.....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