使用正则表达式剥离grep的输出

时间:2014-11-19 20:24:00

标签: regex bash shell sed grep

我有一个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实用程序是否有用?任何帮助将不胜感激。

2 个答案:

答案 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

中过滤并重新格式化