2013-05-07 2 views
0

Предположим, у меня есть следующая строка. Я хочу, чтобы заменить <b>2</b> to <b>20</b> если <a>2</a>Как условно заменить строку на sed

<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> 

я могу сделать это с помощью СЭД?

ответ

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 
0

Это заменит первое вхождение <b>2</b> с <b>20</b> в все линии с <a>2</a> invoke:

sed '/<a>2<\/a>/s/<b>2<\b>/<b>20<\/b>/' input 
Смежные вопросы