我正在嘗試僅使用sedor perl -pi(唯一可用的工具)來評論 openAM 中 web.xml 中的一個部分。
所以,我在這里復制:
<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 -->/"
uj5u.com熱心網友回復:
您應該使用 XML-aware 工具來處理 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 ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/371912.html
