我想替换输出的字符串grep
,我有:
$ npm info webpack | grep version
它输出我
$ version: '2.1.0-beta.12',
但我想要:
$ 2.1.0-beta.12
所以我想我可以通过sed
替换不必要的子字符串来实现这一点。但对我来说最难的部分是:
$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command
怎样才能达到我的目标?
答案1
如果您要使用 sed,则无需同时使用 grep。尝试:
npm info webpack | sed -En "s/version: '(.*)',/\1/p"
例子:
$ echo "version: '2.1.0-beta.12'," | sed -En "s/version: '(.*)',/\1/p"
2.1.0-beta.12
替代方案:使用 awk
类似地,如果我们使用 awk,则不需要再使用 grep:
npm info webpack | awk -F"[ ',]+" '/version:/{print $2}'
例子:
$ echo "version: '2.1.0-beta.12'," | awk -F"[ ',]+" '/version:/{print $2}'
2.1.0-beta.12
怎么运行的:
-F"[ ',]+"
这告诉 awk 使用空格、单引号或逗号或它们的任意组合作为字段分隔符。
/version:/{print $2}
如果一行包含
version:
,则打印第二个字段。
答案2
替换命令sed
( s
) 需要一个搜索模式和一个替换字符串。您只为其提供了一个搜索模式。您还应该在 shell 中正确地引用字符串:
$ npm info webpack | grep 'version:' | sed 's/version: //'
这将给您结果'2.1.0-beta.12',
,但它并不完全是您想要的。
由于输出grep
非常简单,您可以使用cut
分隔符'
来获取行的第二个字段(而不需要复杂的正则表达式):
$ npm info webpack | grep -F 'version:' | cut -d "'" -f 2
这将给你2.1.0-beta.12
。
我还添加了-F
,grep
因为您搜索的字符串是固定字符串,不是正则表达式。
答案3
首先,您可以尝试使用sed
:
npm info webpack | grep version: | sed 's/version: //'
或者你可以使用awk
:
npm info webpack | grep version: | awk '{print $2}'
这可能更容易。