我将以下字符串"version": "1.0.0",
传递给sed
,我试图将1.0.0
从中删除。我希望通过规则得到它:在: "
和",
之间获取字符串。
我一直在尝试以下方法:
sed -e '/:\ \"/,/\ ",/p'
sed -e 's/:\ \"\(.*\)\",/\1/'
第一个没有做任何事情,最后一个返回"version"1.0.0
,这是接近但没有雪茄。我错过了什么?
答案 0 :(得分:1)
您需要在搜索模式的任意一侧使用.*
来匹配完整输入,以便能够仅使用捕获的组的反向引用替换整行。
此sed
应该有效:
s='"version": "1.0.0",'
sed 's/.*: "\([^"]*\)",.*/\1/' <<< "$s"
1.0.0
甚至是这个:
sed 's/.*: "\(.*\)",.*/\1/' <<< "$s"
1.0.0
答案 1 :(得分:1)
另一种方法,使用grep with lookahead / lookbehind:
$ grep -oP '(?<=: ")[^"]*(?=")' <<< '"version": "1.0.0",'
1.0.0
或更短,使用\K
从匹配的字符串中排除: "
:
$ grep -oP ': "\K[^"]+' <<< '"version": "1.0.0",'
1.0.0