如何使用 grep 或其他命令以正确的方式提取匹配?

nuh*_*oca 1 bash awk grep sed

数天以来,我一直在研究关于 SO 的相关问题,但找不到适合我的用例的答案。我想要grep匹配后的单词但没有一些特殊字符,例如quotes, comma, dash。我的文件中有以下行。

...
"versionName": "1.1.5000-internal",
...
Run Code Online (Sandbox Code Playgroud)

我想在没有任何-internal后缀的情况下提取版本本身,但我失败了。所需的输出如下:

1.1.5000
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

1.我尝试在下面提取不带引号的版本名称,但失败了。

grep -oP '(?<="versionName": )[^"]+(?=")' file.json
Run Code Online (Sandbox Code Playgroud)

2. 这一款提供了所有特价的匹配。

grep -oP '(?<="versionName": ).*' file.json | sed 's/^.*: //'
Run Code Online (Sandbox Code Playgroud)

3. 这一个和第二个一样。

grep '"versionName": ' file.json | sed 's/^.*: //'
Run Code Online (Sandbox Code Playgroud)

我知道应该有更短更简单的方法,但我不擅长这些东西。提前致谢!

Jam*_*own 5

使用jq

$ jq -r '.versionName|sub("-.*";"")' file.json 
Run Code Online (Sandbox Code Playgroud)

输出:

1.1.5000
Run Code Online (Sandbox Code Playgroud)