数天以来,我一直在研究关于 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)
我知道应该有更短更简单的方法,但我不擅长这些东西。提前致谢!
使用jq:
$ jq -r '.versionName|sub("-.*";"")' file.json
Run Code Online (Sandbox Code Playgroud)
输出:
1.1.5000
Run Code Online (Sandbox Code Playgroud)