我试图在web.xml的openAM内部使用sed或perl -pi (我唯一可用的工具)来评论一个部分。
所以,我会在这里复印:
<servlet-mapping>
<servlet-name>AgentConfigurationServlet</servlet-name>
<url-pattern>/agentconfig/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>VersionServlet</servlet-name>
<url-pattern>/ccversion/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FSServlet</servlet-name>
<url-pattern>/federation/*</url-pattern>
</servlet-mapping>但我只想评论一下<servlet-mapping>...</servlet-mapping> (但只有/ccversion中的那个)。我什么都试过了,但没能成功。
我试过的是:
sed -e "s/(<servlet-mapping>[\r\n]+.*[\r\n]+.*\/ccversion.*[\r\n]+.*)/<\!-- \$1 -->/"发布于 2021-11-30 18:13:20
您应该使用XML感知工具来处理XML。提到Perl,有几个XML处理模块可用。
但是,如果你坚持,冒着自己的风险尝试以下几点:
perl -0777 -pe 's{.*\K(<servlet-mapping>\s*.*?<url-pattern>/ccversion/.*?</servlet-mapping>)}{<!-- $1 -->}s' file.xml-0777以"slurp模式“读取文件,即读取整个文件,而不是逐行处理;.*\K是为了匹配和忘记我们感兴趣的<servlet-mapping>之前的一切;.*?只需要问号(“节约量词”)来匹配最近的<url-pattern>,同样地,第二个问号需要匹配到最近的</servlet-mapping>,而不是匹配到最后一个;}s修饰符更改点以匹配换行符。顺便说一句,在xsh中,我碰巧维护的XML::LibXML的包装器,也可以用它来处理。
open file.xml ;
for my $sm in //servlet-mapping[url-pattern="/ccversion/*"]
xinsert comment {"$sm"} replace $sm ;
save :b ; 发布于 2021-12-04 00:37:09
因为有人不得不这样说,所以我需要实践:)下面是如何使用libxml身份转换来实现它:
comment.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/info/servlet-mapping[url-pattern[text()='/ccversion/*']]">
<xsl:text disable-output-escaping="yes"><!-- </xsl:text>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<xsl:text disable-output-escaping="yes"> --></xsl:text>
</xsl:template>
</xsl:stylesheet>xsltproc comment.xsl input.xml
输出
<?xml version="1.0"?>
<info>
<servlet-mapping>
<servlet-name>AgentConfigurationServlet</servlet-name>
<url-pattern>/agentconfig/*</url-pattern>
</servlet-mapping>
<!-- <servlet-mapping>
<servlet-name>VersionServlet</servlet-name>
<url-pattern>/ccversion/*</url-pattern>
</servlet-mapping> -->
<servlet-mapping>
<servlet-name>FSServlet</servlet-name>
<url-pattern>/federation/*</url-pattern>
</servlet-mapping>
</info>https://stackoverflow.com/questions/70174066
复制相似问题