如何用sed有条件地替换字符串

时间:2013-05-07 01:09:51

标签: sed

假设我有以下字符串。如果<b>2</b> to <b>20</b>

,我想替换<a>2</a>
<start>
     <a>1</a><b>1</b>
     <a>2</a><b>2</b>
        .
        .
     <a>10</a><b>10</b>
     <a>2</a><b>2</b>
</start>

新字符串应该如下所示

<start>
     <a>1</a><b>1</b>
     <a>2</a><b>20</b>
        .
        .
     <a>10</a><b>10</b>
     <a>2</a><b>20</b>
</start>

我可以使用sed吗?

2 个答案:

答案 0 :(得分:0)

你可以从这开始:

sed '/<start>/,/<\/start>/s!\(<a>2</a><b>2\)</b>!\10</b>!' input

并根据需要放宽表达式,例如允许标记a中的空格:

sed '/<start>/,/<\/start>/{/<a>[ ]*2[ ]*<\/a>/s!<b>2<!<b>20<!}' input

答案 1 :(得分:0)

这将在<b>2</b>调用的所有行中替换<b>20</b>第一次出现<a>2</a>

sed '/<a>2<\/a>/s/<b>2<\b>/<b>20<\/b>/' input