私のファイル/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>行の前には2つのスペースがあります。
答え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