2016-03-08 82 views
0

这里是我到目前为止的代码...如何使用grep获得匹配[1]?

cat config.json | grep -Po '"server"\s*:\s*"([^"]*)"' 

但我只想(括号)中的一部分。我不能使用后视,因为它是可变长度的。我有什么选择?

样品输入1:

{"debug":false,"server":"dev-dutch","env":"dev"} 

样品输入2:

{ 
    "debug": false, 
    "server": "dev-dutch", 
    "env": "dev" 
} 

所需的输出两种:

dev-dutch 

我知道有可能是更安全/更好的方式来解析JSON ,但我想在shell中执行此操作,并且它应该在Ubuntu和FreeBSD上运行,而无需安装任何外部程序,所以我可以用grep破解。

+0

@Cyrus良好的通话。更新。 – mpen

回答

1

随着GNU的grep:

grep -Po '"server": *"\K[^"]+' file 
+0

'\ K'如何工作?它是否匹配从那里到结束还是什么?你可以添加一个停止点吗?在此找不到任何文档。 – mpen

+1

Nvm,发现它[这里](http://perldoc.perl.org/perlre.html#Extended-Patterns)。 – mpen