sed를 사용하여 파일의 지정된 줄 앞에 텍스트를 삽입하는 방법은 무엇입니까?

sed를 사용하여 파일의 지정된 줄 앞에 텍스트를 삽입하는 방법은 무엇입니까?

내 파일 /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml의 마지막 줄은 다음과 같습니다.

    <key name='notify-on-connect' type='b'>
      <summary>Notify on connect</summary>
      <description>
        If true, show a notification when a user connects to the system.
      </description>
      <default>true</default>
    </key>
  </schema>
</schemalist>

이제 다음 효과를 얻기 위해 이 줄 앞에 몇 줄을 추가하고 싶습니다.

    <key name='notify-on-connect' type='b'>
      <summary>Notify on connect</summary>
      <description>
        If true, show a notification when a user connects to the system.
      </description>
      <default>true</default>
    </key>

    <key name='enabled' type='b'>
      <summary>Enable remote access to the desktop</summary>
      <description>
      If true, allows remote access to the desktop via the RFB
      protocol. Users on remote machines may then connect to the
      desktop using a VNC viewer.
      </description>
      <default>false</default>
    </key>
  </schema>
</schemalist>

이제 sed 명령을 통해 위의 효과를 얻으려면 쉘 스크립트를 작성해야 합니다.

sed -i "/\</schema\>/i  \    <key name='enabled' type='b'>\n      <summary>Enable remote access to the desktop</summary>\n      <description>\n        If true, allows remote access to the desktop via the RFB\n        protocol. Users on remote machines may then connect to the\n        desktop using a VNC viewer.\n      </description>\n      <default>false</default>\n    </key>\n" /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml

그러나 실행 후 내용이 추가되지 않았습니다. 위의 효과를 얻으려면 sed를 어떻게 사용하여 작성해야 합니까? 참고: </schema> 줄 앞에 공백이 두 개 있습니다.

답변1

이 명령은 다음 템플릿을 사용하여 입력 파일에서 변경하는 i\대신 백슬래시로 이스케이프된 리터럴 하드코딩된 개행 문자를 사용합니다 .\n

sed -i.BAK -e '
/<\/schema>/i\
    <key name='\''enabled'\'' type='\''b'\''>\
      <summary>Enable remote access to the desktop</summary>\
      <description>\
      If true, allows remote access to the desktop via the RFB\
      protocol. Users on remote machines may then connect to the\
      desktop using a VNC viewer.\
      </description>\
      <default>false</default>\
    </key>
' /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml

## now do a diff between these:
diff /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml.BAK

관련 정보