我有一个bash脚本我正在尝试调整以某种方式输出grep的内容。这就是我的剧本现在的样子:
files=/var/chef/cache/cookbooks/*
for f in $files
do
echo "${f##*/}" && sudo cat $f/metadata.json | grep \"version\"
done
输出现在看起来像这样:
elasticsearch
"version": "0.3.10"
我想让它输出没有“版本”的实际数字:在前面或引号。上面的例子我想看起来像这样。
elasticsearch
0.3.10
我是正则表达式的新手,所以我不确定最好的方法是什么。管道grep的输出以使用正则表达式搜索的sed实用程序是否有用?任何帮助将不胜感激。
答案 0 :(得分:1)
您可以通过以下方式替换for循环中的echo
命令:
echo "${f##*/}" && sudo awk -F ': *' '{gsub(/"/, "", $2); print $2}' $f/metadata.json
答案 1 :(得分:1)
echo "${f##*/}" && sudo cat $f/metadata.json | sed -n '/"version": "\([^"]*\)"/ s//\1/p'
直接在sed
中过滤并重新格式化