我想删除第一对 < > 之间的字符串
原文:
< 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 >