그룹 및 여러 줄을 사용하여 sed를 사용하여 구성 파일을 변경할 수 없습니다

그룹 및 여러 줄을 사용하여 sed를 사용하여 구성 파일을 변경할 수 없습니다

/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla구성 파일( )의 변경 사항을 스크립트로 작성하려고 하는데 , 그 내용은 다음과 같습니다.

[Update already installed software]
Identity=unix-group:admin;unix-group:sudo
Action=org.debian.apt.upgrade-packages
ResultActive=yes

[Printer administration]
Identity=unix-group:lpadmin;unix-group:admin;unix-group:sudo
Action=org.opensuse.cupspkhelper.mechanism.*
ResultActive=yes

[Disable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=no

ResultActive=yes로 시작하는 모든 블록을 설정하려고 합니다 [Disable hibernate. sed 및 regex 그룹을 사용하여 다음을 생각해냈습니다.

sed -i 's/\(Disable hibernate.*\n.*\n.*\nResultActive\=\)no/\1yes/' /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

그러나 이렇게 해도 파일은 변경되지 않습니다. ~에 따르면정규식, 정규식은 일치하지만 확인합니다.sed.js.org, sed는 아무것도 변경하지 않습니다.

sed최대 절전 모드 구성 블록의 해당 줄을 변경하는 명령을 어떻게 수정합니까 ?

편집하다:sed개행 문자가 있는 그룹이 전혀 작동 하지 않는 것 같습니다 .

답변1

Sed는 기본적으로 줄 기반입니다. 여러 줄 일치를 수행하려면 패턴 공간에 명시적으로 줄을 추가해야 합니다( N예: 명령 사용).

대신, 여전히 행 기반이지만 관심 있는 행을 앞으로 로드하는 유사한 작업을 수행할 수 있습니다.

$ sed '/^\[Disable hibernate/{n;n;n;/^ResultActive/s/=no/=yes/;}' file.pkla
[Update already installed software]
Identity=unix-group:admin;unix-group:sudo
Action=org.debian.apt.upgrade-packages
ResultActive=yes

[Printer administration]
Identity=unix-group:lpadmin;unix-group:admin;unix-group:sudo
Action=org.opensuse.cupspkhelper.mechanism.*
ResultActive=yes

[Disable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

원본 버전과 마찬가지로 이는 블록의 줄 순서를 신뢰할 수 있는 경우에만 작동합니다.

관련 정보