sed的正则用的是BREs/EREs,不支持非贪婪模式。当然有一些方法可以实现非贪婪,比如:
$ echo abcOabcdOabc | sed 's/.*O//'
结果是abc
;
$ echo abcOabcdOabc | sed 's/[^O]*O//'
结果是abcdOacb
,变相实现了非贪婪的匹配。
但如果是这种情况:
<div>...</div>blabla<div>...</div>
如果想用sed去除前后的<div>...</div>
只留下blabla
,用s/<div>.*<\/div>//
会把blabla也吃掉,又没法用[^div]
来实现对div
整串的不匹配,那么要怎样实现非贪婪的匹配呢?
我试了下这样可以,
echo '<div>...</div>blabla<div>...</div>' | sed 's/<div>[^<]\+<\/div>//g'
;如果你是要从html/xml中提取信息的话, 还是用支持DOM操作的东西作处理吧;
正则太费时间, 正确性也不好把握