我该如何编写这个正则表达式

时间:2014-03-28 15:37:25

标签: regex parsing unix

我有像这样的文件结构

var1=12.785, blah blah variable2=45.654 blih blah F=0.454
var1=852.785, blah blah var2=45.654 // blih blah FGT=8738
var1=12.785, blah blah DGSTE=4583; blih blah TEST=473.6984
var1=12.785, blah blah var2=45.654 blih blah var3=48834

我想要一个正则表达式,它只会给我'= sign

之后的数字
12.785,45.654,0.454
852.785,45.654,8738
12.785,4583,473.6984
12.785,45.654,48834

(基本上变量=数字结构成立) 你可以帮忙吗? 我正在使用GNU grep和sed(但也有其他收费)

3 个答案:

答案 0 :(得分:0)

这将为您的示例数据提供技巧:var\d=(\d+\.\d+) 第一个子组包含结果数字。

如果您的数据非常简单,您甚至可以使用以下\d+\.\d+来简化此操作,var并不关心{{1}}前缀,但它确实可以正常使用输入数据。

答案 1 :(得分:0)

unix开始使用perl one liner。

perl -lne 'print join(",", (m/=([\d.]+)/g));' input.txt

使用m/=([\d.]+)/g,它会在=之后提取所有数字。假设所有数字都是xx.yy格式。否则,您必须使用边界检查将正则表达式[\d.]+更改为\d+(\.\d+)?

答案 2 :(得分:0)

要查找以下所有数字=,您需要一个看起来像=(\d*\.?\d+)的正则表达式。 您无法通过grep获得所需的内容,因为它始终返回整个匹配行。你必须使用sed。你可以找到一些有用的参考资料: