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