2014-06-23 3 views
0
내가 문자열 <TH bgcolor=#7070ff>DATAbase</th>

에 일치하는 대체 그러나이배쉬 찾아 첫 번째 인스턴스

이 에게

사람이 설명 할 수 <th> 오히려 <TH> DATAbase </th>보다 생산 나는

echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed "s/\<TH.*\>/<th>/" 

사용하여 <TH and > 사이에 'bgcolor=#7070ff'을 제거 할 SED 나에게 왜 sed가 '>'의 두 번째 인스턴스와 일치합니까?

통해 읽기 sed manual 나는 그것을 알아낼 수 없습니다!

편집 :

echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's|\(<TH[^<]*>\)|<th>|g' 

이 작동하는 것 같다,하지만 난 이유를 알고하지 않습니다 ...

답변

1

당신은이 나오지 명령을 시도해 볼 수도 있습니다,

sed 's|<TH[^>]*>|<th>|g' file 

예 :

첫 번째로 유지하려면 <TH>을 그대로 두십시오. 캡처 그룹이없는 당신이 작은 글자의 <TH> 다음이 시도하려는 경우

$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's/^\([^ ]*\)[^>]*\(.*\)$/\1\2/g' 
<TH>DATAbase</th> 

, 하나

$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's/^\([^ ]*\)[^>]*\(.*\)$/<th\2/g' 
<th>DATAbase</th> 

더 간단

$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's|<TH[^>]*>|<th>|g' 
<th>DATAbase</th> 

설명 :

  • <TH[^>]*> 문자 <TH에서 다음 문자 >까지 0 문자 이상 일치하고 > 기호와 일치합니다. 따라서 문자열 <TH bgcolor=#7070ff>과 일치합니다. 일치하는 문자열은 <th>으로 바뀌 었습니다.
+0

나오지도 참조 : - r에 bash 쉘 – Liz

+0

대기 불법 옵션을 선택합니다. 내 대답을 업데이트. –

+0

내 대답 업데이트 :-) –

0

시도 :

echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed "s/<TH[\w =#[:alnum:]]*>/<th>/" 
+0

행운을 빌어 요 - $ echo ' DATAbase'| 나오지도 "S/\ / /" 데이터베이스 – Liz

+0

당신 말이 맞아 @liz_ophiuchus - 업데이트 대답 – alfasin

관련 문제