Regex 基于grep的正则表达式模式匹配与提取
我对用一行模式匹配一个字符串并使用grep提取一个值有着非常奇怪的兴趣。下面是输入,我只想从字符串中提取日期 输入Regex 基于grep的正则表达式模式匹配与提取,regex,shell,Regex,Shell,我对用一行模式匹配一个字符串并使用grep提取一个值有着非常奇怪的兴趣。下面是输入,我只想从字符串中提取日期 输入Host GOOGLE production.2015-08-01-21.migrator.deploy:{R:[{A:“0b87654nuy”,RC:“JAVA”…[行继续] 对于上面的输入,我想编写一个正则表达式,该正则表达式与{a:之后和”,RC:之前的日期和字符串相匹配。我知道我可以通过sed和awk来完成这项任务,但我只想通过grep来完成这项任务 作为第一步,为了只提取数
Host GOOGLE production.2015-08-01-21.migrator.deploy:{R:[{A:“0b87654nuy”,RC:“JAVA”…[行继续]
对于上面的输入,我想编写一个正则表达式,该正则表达式与{a:
之后和”,RC:
之前的日期和字符串相匹配。我知道我可以通过sed和awk来完成这项任务,但我只想通过grep
来完成这项任务
作为第一步,为了只提取数据,我尝试了下面的命令,但它无法工作。
有人知道如何提取这两个字符串以提取值。请分享您的想法。如果我得到一个答案/建议,使用grep在一个命令中提取两个值,那将是非常好的
$grep-o--perl regexp“(托管谷歌产品。([0-9]+?-[0-9]+?-[0-9]+)?-。”
上述命令所需的O/p:2015-08-01
如果我得到一个答案/建议,使用grep在一个命令中提取2015-08-01和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
我想编写一个正则表达式,它匹配{a:
之后和之前的日期和字符串,RC:
您可以使用此grep:
grep -oP '(?<=A:").*?(?=",RC:)' file
0b87654nuy
grep-oP'(?谢谢阿维纳什。我只是想知道,\K
的目的是什么。我在grep
的选项中找不到它。它属于PCRE解决方案grep-oP'\bHost GOOGLE production\.\K[0-9]+-[0-9]+-[0-9]++(?=-)\A:“\K.[^]*(?=”,RC:)“
不起作用..没有结果没有o/P或..我的命令中需要一个小的更正。我已经缩小了上面的命令的范围,以获得输出2015-08-01-21,0b87654nuy
。但我只需要日期和值ie)2015-08-01,0b87654nuy
。为了从我得到的o/p中去掉数字“21”,我编写了命令sed-e'\([0-9]+-[0-9]+-[0-9]+\)-[0-9]+\([a-zA-Z0-9]+\)$/\2/'
但是din成功了。有人能告诉我我缺少了什么吗?嗯,这似乎与我的grep
命令无关,但既然你要求,你可以使用:sed-r的/([0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+(,[a-zA-Z0-9]+)$/\1\2/'