使用grep进行正则表达式模式匹配和提取

时间:2015-08-18 10:33:19

标签: regex shell

我非常感兴趣的是模式匹配字符串的行并使用grep提取值。下面是输入,我想从字符串中单独提取日期。

输入Host-GOOGLE-production.2015-08-01-21.migrant.deploy:{R:[{A:"0b87654nuy",RC:"JAVA".....[and the line continues]

对于上面的输入,我想编写一个与{A:"之后和",RC:之前的日期和字符串匹配的正则表达式。我知道我可以通过sed和awk做到这一点,但我只想通过grep执行此任务。

作为第一步,只提取数据,我尝试了下面的命令,但它有效。 有人知道如何提取这两个字符串来提取值。请分享你的想法。如果我得到一个答案/建议,使用grep

在一个命令中提取两个值2015-08-01 & 0b87654nuy,那就太好了

$grep -o --perl-regexp "(Host-GOOGLE-production.([0-9]+?-[0-9]+?-[0-9]+)?-.*)"

上述命令所需的O / P:2015-08-01

2 个答案:

答案 0 :(得分:2)

  

我想编写一个与{A:"之后和",RC:之前的日期和字符串匹配的正则表达式

你可以使用这个grep:

grep -oP '(?<=A:").*?(?=",RC:)' file
0b87654nuy

答案 1 :(得分:0)

  

如果我得到一个提取两个值的答案/建议,那将是很好的2015-08-01&amp;使用grep

在一个命令中使用0b87654nuy

使用\K和交替运算符来获取两个输出。

grep -oP '\bHost-GOOGLE-production\.\K[0-9]+-[0-9]+-[0-9]+(?=-)|A:"\K.[^"]*(?=",RC:)'

示例:

$ echo 'Host-GOOGLE-production.2015-08-01-21.migrant.deploy:{R:[{A:"0b87654nuy",RC:"JAVA".....[and the line continues]' | grep -oP '\bHost-GOOGLE-production\.\K[0-9]+-[0-9]+-[0-9]+(?=-)|A:"\K.[^"]*(?=",RC:)'
2015-08-01
0b87654nuy