/usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml 文件的部分内容如下:
<key name='alternative-port' type='q'>
<summary>Alternative port number</summary>
<description>
The port which the server will listen to if the 'use-alternative-port'
key is set to true. Valid values are in the range of 5000 to 50000.
</description>
<default>5900</default>
</key>
<key name='require-encryption' type='b'>
<summary>Require encryption</summary>
<description>
If true, remote users accessing the desktop are required to
support encryption. It is highly recommended that you use a
client which supports encryption unless the intervening network
is trusted.
</description>
<default>false</default>
</key>
<key name='authentication-methods' type='as'>
<summary>Allowed authentication methods</summary>
<description>
Lists the authentication methods with which remote users may
access the desktop.
There are two possible authentication methods; "vnc" causes the
remote user to be prompted for a password (the password is
specified by the vnc-password key) before connecting and "none"
which allows any remote user to connect.
</description>
<default>['none']</default>
</key>
现在我想将字符串 false 的段落更改为 true,我应该如何使用 shell 脚本来做到这一点?
答案1
你的问题有点不清楚,但无论你真正想要什么,你都可以从 shell 脚本调用 perl:
- 以下代码只会更改
true
为false
在线5
:
#!/bin/sh
perl -pi -e 's/true/false/ if($. == 5)' /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
- 更改
$. == 5
为$. > 5
将确保它发生在第 5 行之后的任何地方
答案2
我已经理解你的问题是询问如何在开始的节中更改<default>false</default>
为。<default>true<default>
<key name='require-encryption' type='b'>
使用 XML 解析器,您可以根据结构而不是文件中行的物理布局可靠地更改此设置。以下是您可以如何使用xmlstarlet
.
出于示例的目的,我已将您的代码片段用<root>
…包装起来,转换为有效的 XML </root>
。您的原始文件已经是有效的 XML,因此不需要进行此编辑,但您可能需要更精确地进行 XPath 匹配。使用此代码来匹配 的元素路径…/key/default
,其中key
有一个name
值为 的属性require-encryption
,并将 的 值更改为default
文字true
:
xmlstarlet ed -u '//key[@name="require-encryption"]/default' -v true org.gnome.Vino.gschema.xml
像往常一样,如果您想就地执行此操作,请使用标准配方command > output.tmp && mv -f output.tmp output
。 (这几乎就是许多 GNU 命令中-i
/--in-place
标志在幕后为您所做的事情。)
xmlstarlet … > org.gnome.Vino.gschema.xml.tmp &&
mv -f org.gnome.Vino.gschema.xml.tmp org.gnome.Vino.gschema.xml