【问题标题】:Trim line to the first comma (bash)将行修剪到第一个逗号 (bash)
【发布时间】:2020-12-16 17:54:50
【问题描述】:

我有一行需要将分支名称剪切为第一个逗号:

commit 2bea9e0351dae65f18d2de11621049b465b1e868 (HEAD, origin/MGB-322, refs/pipelines/36877)

我需要删掉MGB-322。 一行中的字符数总是不同的。 awk -F "origin/" '{print $2}' - 我就是这样剪的

MGB-322, refs/pipelines/36877)

但是如何告诉它修剪到第一个逗号? 我尝试通过substr 进行操作,

awk -F "origin/" '{print substr ($2,1, index $2 ,)}'

但不清楚如何正确指定索引中的逗号

【问题讨论】:

  • 仅用于 GNU awk 的练习:awk '{print $2}' FS='[()]' file | awk '{print $2}' FS=', ' | awk '{print $2}' FS='/'
  • 一个简单的sed 命令:sed 's|.*origin/||; s/,.*//'
  • 除了过滤之外,您似乎可以将格式应用于git-log(或您用于生成字符串的任何工具)以获得您想要的内容。
  • awk 手册页非常清楚如何在 index() 中指定逗号 - index($2,",")

标签: bash awk sed git-bash


【解决方案1】:

使用任何 awk。使用/, 作为字段分隔符:

awk '{print $3}' FS='[/,]' file

输出:

MGB-322

见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

【讨论】:

    【解决方案2】:

    使用 OP 的代码修复: 认为您只有出现 origin 以防出现多次,然后将 $NF 更改为 $2 以下代码。在https://ideone.com/xjv2we 中编写和测试

    awk -F"origin/" '{print $NF}' Input_file
    


    sed 在这里也可能会有所帮助,通用解决方案它基于第一次出现的逗号和 / 根据 OP 的线程标题。我是在手机上写的,所以现在还不能测试,过一段时间再测试。

    sed 's/\([^,]*\),\([^/]*\)\/\(.*\)/\3/' Input_file
    

    【讨论】:

      【解决方案3】:

      “我需要切除 MGB-322。”
      您可以分两步使用cut

      echo "${line}" | cut -d"/" -f2 | cut -d"," -f1
      

      我更喜欢awk(已经被其他人回答)或sed 一步

      echo "${line}" | sed -r 's/.*origin.(.*), refs.*/\1/'
      

      【讨论】:

        【解决方案4】:

        为什么要产生 procs? bash 的内置参数解析会处理这个问题。

        如果

        $: line="commit 2bea9e0351dae65f18d2de11621049b465b1e868 (HEAD, origin/MGB-322, refs/pipelines/36877)"
        

        然后

        $: [[ "$line" =~ .*origin.(.*), ]] && echo "${BASH_REMATCH[1]}"
        MGB-322
        

        或许

        $: tmp=${line#*, origin/};  echo ${tmp%,*}
        MGB-322
        

        甚至

        $: IFS=",/" read _ _ x _ <<< "$line" && echo $x
        MGB-322
        

        参考https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-09-27
          • 2014-03-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多