【问题标题】:AWK print between two characters两个字符之间的 AWK 打印
【发布时间】:2021-01-01 16:43:57
【问题描述】:

当我尝试这个命令时:

/usr/bin/curl -s sketch*.zip "https://www.sketch.com/downloads/mac/" |\
    grep 'download.sketchapp.com/sketch-' | awk 'NR==1{print $3}'

输出是:

content="0;URL='https://download.sketchapp.com/sketch-68.2-102594.zip

我想要得到的是:

68.2

任何帮助将不胜感激。

【问题讨论】:

  • 类似...| awk 'NR==1{sub(/^.*-/,"",$3);sub(/-.*$/,"",$3);print $3}' ... $0 可能与$3sub()s 一样有效。祝你好运。
  • 例如:grep "something" | awk 'NR==1{print}' 可以写入一个命令awk '/something/ && (NR==1){print}'
  • ...或者你可以用一个 grep 得到你想要的来打印模式之后的内容,例如grep -oP '(?<=download.sketchapp.com/sketch-)[^-]+'

标签: awk grep


【解决方案1】:

您似乎想在模式之后提取数字,仅针对第一个匹配行。您可以使用一个grep 命令:

... | grep -oPm1 '(?<=download.sketchapp.com/sketch-)[^-]+' file

或者因为这是您想要的第一个 curl 输出行的第三个字段,您可以使用一个 awk 命令(使用连字符作为分隔符的拆分字段来排列并打印中间的元素):

awk '/download.sketchapp.com/sketch-/ && NR==1 {split($3,a,"-"); print a[2]; exit}'

【讨论】:

    【解决方案2】:

    使用 sed:

    /usr/bin/curl -s sketch*.zip "https://www.sketch.com/downloads/mac/" | \
        sed -n 's!.*download.sketchapp.com/sketch-\([^-]*\).*!\1!p;' | \
        head -1
    

    head 是摆脱多个匹配项。 sed 命令提取download.sketchapp.com/sketch- 之后的非连字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      相关资源
      最近更新 更多