如何使用 sed 或正则表达式模式删除文件中后跟反斜杠的文本

如何使用 sed 或正则表达式模式删除文件中后跟反斜杠的文本

我的文件中有以下内容,我必须删除文本“monitoring”以及后缀 ( monitoring/)处的反斜杠

 <base  href="/monitoring/" />

所以输出将如下所示

<base  href="/" />

我可以通过 sed 或任何其他方式实现这一点

答案1

假设该文档是格式正确的 XML 文档:

<?xml version="1.0"?>
<root>
  <base href="/monitoring/"/>
</root>

以下命令用于从包含该字符串的任何节点属性中xmlstarlet删除该字符串monitoring/(及其后面的所有内容) :basehref

xmlstarlet ed \
    -u '//base/@href[contains(.,"monitoring/")]' \
    -x 'substring-before(.,"monitoring/")' file.xml

这将输出一个 XML 文档,您应该将其重定向到新名称,然后用其替换原始文件。

答案2

尽管我强烈建议使用专用解析器(例如结构化文本),但只要文件中只有一个这样的标记xmlstarlet,以下命令就可以工作:sedbase

sed -E '/\<base/s,(href="/)[^"]+,\1,' input.html 

这将作用于包含<base模式的行,并将模式替换为,从而消除 后面的文本。href="/any text up to the double quotehref="//

请注意,默认情况下这不会编辑该文件。要编辑文件,请将输出重定向到文件,或使用就地编辑选项i

sed -i -E '/\<base/s,(href="/)[^"]+,\1,' input.html 

相关内容