2013-05-07 3 views
0

다음 문자열이 있다고 가정합니다. 나는이 나오지 사용하여이 작업을 수행 할 수있는이조건부로 문자열을 sed로 바꾸는 방법

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

과 같아야합니다 <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> 

새로운 문자열을 교체하려면?

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

답변

0

이 시작할 수 있습니다 <a>2</a> 인 모든 행은 다음을 호출합니다.

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

이것은에 <b>20</b><b>2</b>의 첫 번째 항목을 대체합니다 : 예를 들어 태그 a에 공백이 허용

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

을 필요에 따라 표현을 완화 :

관련 문제