【发布时间】:2014-08-07 15:57:02
【问题描述】:
我有两种可能的文本之一:
myProg vFOO 3.1.2.11.1+build4 (Build time: Aug 7 2014 15:33:58)
myProg v3.1.2.11.1+build4 (Build time: Aug 7 2014 15:33:58)
如何在我的 sed 正则表达式中忽略整个“FOO”字符串? 所以它会打印出来:
v3.1.2.11.1+build4
我正在使用:
sed -n '/myProg v/s/.*myProg v["FOO "]\([[:alnum:][:punct:]]*\).*/v\1/gp'
谢谢
【问题讨论】:
-
您是否有理由要使用 sed?完全不需要 sed 的本机 bash 实现是否可以接受?
-
我想我之前写过这段代码是为了支持我们拥有的旧 AIX 服务器。无法安装较新的 bash,也无法使用
grep -Po。 sed 是我发现的更好的选择。 -
我也更喜欢在单行中作为管道操作
-
"In a single line" 使用
=~很容易——我只是出于懒惰做了两个操作(在调用正则表达式之前统一案例,从而降低复杂性/测试要求相同的)。 “作为管道操作”——好吧,如果这适合你正在做的事情;请注意,它有性能成本。