使用 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不支持非贪婪匹配。

您可以匹配除>and之外的任何字符/

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 >

相关内容