0

假设我有以下字符串。<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 做到这一点吗?

4

2 回答 2

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
于 2013-05-07T01:14:16.977 回答
0

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

sed '/<a>2<\/a>/s/<b>2<\b>/<b>20<\/b>/' input
于 2013-05-07T01:21:37.257 回答