Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 基于grep的正则表达式模式匹配与提取_Regex_Shell - Fatal编程技术网

Regex 基于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来完成这项任务 作为第一步,为了只提取数

我对用一行模式匹配一个字符串并使用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/'