为什么使用如下sed命令提取不到指定内容?

我想提取所有_v或者_f结尾的变量名,具体情况如下所示:文本内容如下:EventID_v=enterprise_v.."|"..generic_trap_v.."|"..... 我想提取所有_v或者_f结尾的变量名,具体情况如下所示:
文本内容如下:
EventID_v = enterprise_v .. "|" .. generic_trap_v .. "|" .. specific_trap_v
if (EventId_v == "dummy case statement") then -- This will prevent syntax errors in case no includes are added below.
命令如下:
sed -n 's/.*[^a-zA-Z0-9_]\([a-zA-Z0-9_]*_[fv]\).*/\1/p' TEXT
得出如下结果:
specific_trap_v
EventId_v
为什么少了一个EventID_v,一直找不到原因。
展开
 我来答
cof1
2012-01-18 · TA获得超过283个赞
知道答主
回答量:61
采纳率:0%
帮助的人:95.3万
展开全部
sed支持的正则表达式是贪婪模式的,它总是与最长的可能长度匹配,而且越是排在前面的通配符优先级越高。就比如:有字符串:uid=100(guest) gid=100(others)
如果用sed 's/.*(\(.*\)).*/\1/' 去匹配就只能得到others.
这个和你第一行只得到specific_trap_v的原因, 你的.*[^a-zA-Z0-9_]是匹配到specific_trap_v之前的空格的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式