sed를 사용하여 < > 사이의 문자열을 삭제하세요.

sed를 사용하여 < > 사이의 문자열을 삭제하세요.

첫 번째 쌍 < ​​> 사이의 문자열을 제거하고 싶습니다.

원래의:

< a href="ACM-Reference-Format.dbx"> ACM-Reference-Format.dbx < /a > 

내 생각엔

ACM-Reference-Format.dbx</a> 

나는 사용하려고

sed 's/[<->]*/ but it only removed the first <

답변1

정규식에서는 []대괄호 사이의 모든 문자와 일치하는 문자 클래스가 정의됩니다. 예를 들어 az와 사이의 알파벳 문자를 일치시킬 수 있습니다 [a-z]. 이것은 귀하의 예에 도움이 되지 않습니다.

대신에 원하는 것은 일치, <임의의 문자, 그 뒤에 입니다 >.

일반적으로 을 사용할 수 있지만 <.*?>Panki가 지적했듯이 sed탐욕스럽지 않은 일치는 지원되지 않습니다.

>및 다음을 제외한 모든 문자를 일치시킬 수 있습니다 /.

sed 's/<[^>\/]*>\s//'

예:

─$ echo "< a href="ACM-Reference-Format.dbx"> ACM-Reference-Format.dbx < /a > " | sed 's/<[^>\/]*>\s//'
ACM-Reference-Format.dbx < /a > 

설명하다:

<[^>\/]*>
<           #matches <
 [^   ]     #negated character class, matches any character except the ones specified
   > /      #the characters not to be matched
    \       #escaping the following slash to prevent it from being interpreted as special symbol
       *    #matches previous character between 0 and infinity times
        >   #matches >

답변2

다음을 수행할 수 있습니다.

$ sed 's/[^>]*> \([^>]*\)/\1/' file # or string
ACM-Reference-Format.dbx < /a >

관련 정보