【问题标题】:Stripping output of grep using regular expressions使用正则表达式剥离 grep 的输出
【发布时间】:2014-11-19 20:23:59
【问题描述】:

我有一个 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 实用程序和正则表达式搜索是否有用?任何帮助将不胜感激。

【问题讨论】:

    标签: regex bash shell sed grep


    【解决方案1】:
    echo "${f##*/}" && sudo cat $f/metadata.json | sed -n '/"version": "\([^"]*\)"/ s//\1/p'
    

    直接在 sed 中过滤和重新格式化

    【讨论】:

    • 谢谢,这就是我在这种情况下要找的。​​span>
    【解决方案2】:

    您可以将 for 循环中的 echo 命令替换为:

    echo "${f##*/}" && sudo awk -F ': *' '{gsub(/"/, "", $2); print $2}' $f/metadata.json
    

    【讨论】:

    • 你也可以去掉sudo cat file |,做sudo awk '...' file
    • 感谢@TomFenech 我更新了它。实际上即使"${f##*/}" 也可以在 awk 中处理 :)
    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2013-12-29
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多