
문제:
나는 데비안 설치를 구성하는 스크립트를 작성 중입니다..... DVD에 대한 source.list의 줄을 주석 처리해야 합니다. 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
4.1.0
내부 편집 효과를 위해 GNU awk 이상에 액세스할 수 있다면 운이 좋을 것입니다 . OTW, 다음과 같이 할 수 있습니다 Perl
:
perl -pi -e 's/^/#/ if index($_, "deb cdrom:[Debian GNU/Linux 9.4.0 _S") + 1' /etc/apt/sources.list