簡體   English   中英

Sed 命令:在目標字符串前后使用通配符搜索模式

[英]Sed Command: Searching pattern with wildcard before and after the target string

sample.xml 的內容如下所示。

<Name="com.name1.sample.date" level="ERROR"/>
<Name="com.name2.test" level="WARNING">
<Name="com.name3.type.yeah.trace" additivity="false" level="DEBUG">

我正在嘗試使用 sed 並在所有行上替換“級別參數”的值。 但是,使用 (*) 作為通配符不適用於模式匹配。

我希望 output 與下面的一樣。

<Name="com.name1.sample.date" level="INFO"/>
<Name="com.name2.test" level="WARN">
<Name="com.name3.type.yeah.trace" additivity="false" level="UPDATE">

基本上:從這個模式*level="<pattern>"*到這個模式*level="<updated>"*

* 可以是任何模式。

我在這里做了一些研究,並且能夠使其在開始時適用於通配符,但在結束時不起作用,所以我對每個具有不同結尾的模式進行了特殊處理。 下面是我的代碼。

sed 's|="'"$logger_type"'".*|="'"$logger_type"'" level="'"$update_check"'"/>|g'

其中 $logger_type 是被引用的名稱,其級別應更新為 $update_check 的任何內容

基本上:從這個模式*level="<pattern>"*到這個模式*level="<updated>"*

" as an address regexp to process only the lines matching the regular expression;由於您的輸入是面向行的,我們可以使用" "作為地址正則表達式來僅處理與正則表達式匹配的行; 因此,我們可以簡化替換模式以僅指定level="…"並保留其他屬性(如additivity )。

sed /\"$logger_type'"/s/level="\w*"/level="'$update_check\"/ sample.xml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM