我的文件中有以下内容,我必须删除文本“monitoring”以及后缀 ( monitoring/
)处的反斜杠
<base href="/monitoring/" />
所以输出将如下所示
<base href="/" />
我可以通过 sed 或任何其他方式实现这一点
答案1
假设该文档是格式正确的 XML 文档:
<?xml version="1.0"?>
<root>
<base href="/monitoring/"/>
</root>
以下命令用于从包含该字符串的任何节点属性中xmlstarlet
删除该字符串monitoring/
(及其后面的所有内容) :base
href
xmlstarlet ed \
-u '//base/@href[contains(.,"monitoring/")]' \
-x 'substring-before(.,"monitoring/")' file.xml
这将输出一个 XML 文档,您应该将其重定向到新名称,然后用其替换原始文件。
答案2
尽管我强烈建议使用专用解析器(例如结构化文本),但只要文件中只有一个这样的标记xmlstarlet
,以下命令就可以工作:sed
base
sed -E '/\<base/s,(href="/)[^"]+,\1,' input.html
这将作用于包含<base
模式的行,并将模式替换为,从而消除 后面的文本。href="/any text up to the double quote
href="/
/
请注意,默认情况下这不会编辑该文件。要编辑文件,请将输出重定向到文件,或使用就地编辑选项i
:
sed -i -E '/\<base/s,(href="/)[^"]+,\1,' input.html