使用sed在XML文件中用特殊字符替换字符串

罗林洛克

尽管我使用grep查找相同的字符串没有问题,但我还是很难解决替换XML文件中的文本字符串的问题。由于要替换的新字符串和旧字符串包含许多特殊字符,因此我认为最好将它们存储在变量中,而不是使用大量的反斜杠:

OLD_STRING='<property name="webServiceHost">${jboss.bind.address}</property>'
NEW_STRING='<!--<property name="webServiceHost">${jboss.bind.address}</property>-->'

字符串似乎按预期方式存储:

$ echo $OLD_STRING; echo $NEW_STRING
<property name="webServiceHost">${jboss.bind.address}</property>
<!--<property name="webServiceHost">${jboss.bind.address}</property>-->

Grep'ing确认XML文件中存在旧字符串:

$ grep "$OLD_STRING" jboss-beans.xml
<property name="webServiceHost">${jboss.bind.address}</property>

但是以下sed命令不会产生任何输出:

sed -i 's/"$OLD_STRING"/"$NEW_STRING"/g' jboss-beans.xml

知道我在这里缺少什么吗?

拉吉什

将shell变量放在单引号中会禁用其解释。这就是为什么您的命令无效的原因。

$ echo  's/"$OLD_STRING"/"$NEW_STRING"/g'
s/"$OLD_STRING"/"$NEW_STRING"/g

应该这样写:

sed -i "s/'$OLD_STRING'/'$NEW_STRING'/g" jboss-beans.xml

但是然后调用之前解释变量,sed并且再次包含特殊字符:

$ echo  "s/'$OLD_STRING'/'$NEW_STRING'/g"
s/'<property name="webServiceHost">${jboss.bind.address}</property>'/'<!--<property name="webServiceHost">${jboss.bind.address}</property>-->'/g

出于这个原因sed,这种特殊的特性允许s///通过简单地使用命令分隔符来定义它们,例如:

sed -i "s#'$OLD_STRING'#'$NEW_STRING'#g" jboss-beans.xml

您的搜索表达式仍然包含特殊的正则表达式字符,并且这样使用sed只是浪费了它的功能。我会这样写表达式:

sed -i 's/\(<.*webServiceHost.*jboss.bind.address.*>\)/<!--\1-->/' jboss-beans.xml

当然,您可以根据需要使匹配字符串或多或少地具体化。还有其他不错的功能可以提供帮助。sed允许将编辑操作范围缩小到与特定图案匹配的行。您的命令可能如下所示:

sed -i '/webServiceHost/ s/^\(.*\)$/<!--\1-->/' jboss-beans.xml

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用sed命令批量替换字符串的特殊字符

来自分类Dev

使用sed替换包含特殊字符的字符串

来自分类Dev

使用sed查找并替换特殊字符后的字符串

来自分类Dev

使用SED命令在Jenkinsfile中用变量替换字符串

来自分类Dev

sed替换特殊字符串配额

来自分类Dev

sed替换特殊字符串配额

来自分类Dev

使用bash脚本在文件中用变量替换字符串

来自分类Dev

sed命令替换具有特殊字符“&”的字符串

来自分类Dev

sed 用数字特殊字符替换字符串

来自分类Dev

sed 用空格和特殊字符替换字符串

来自分类Dev

如何使用sed,awk,grep等在跨多个文件的行的子字符串中用%20替换空格

来自分类Dev

在字符串中用`-`替换`_`

来自分类Dev

如何在sed中用美元符号替换字符串?

来自分类Dev

Shell脚本,如何使用sed替换xml文件中字符串的单个实例

来自分类Dev

使用sed将字符串替换为文件内容

来自分类Dev

使用sed将字符串替换为文件内容

来自分类Dev

使用Sed通过文件替换字符串

来自分类Dev

使用sed查找并替换文件中的字符串

来自分类Dev

使用Sed查找并替换文件中的字符串

来自分类Dev

使用sed查找并替换多个文件中的字符串

来自分类Dev

使用sed替换包含斜线和特殊字符的字符串部分

来自分类Dev

使用sed递归替换字符串

来自分类Dev

使用sed替换特定的字符串

来自分类Dev

使用sed进行字符串替换

来自分类Dev

使用Sed或Awk替换字符串

来自分类Dev

使用sed进行字符串替换

来自分类Dev

在 XML 变量中用 NULL 替换空字符串

来自分类Dev

在批处理文件中用通配符替换字符串

来自分类Dev

使用XSLT替换XML文件中的字符串

Related 相关文章

热门标签

归档