修剪第一个逗号bash的行

问题描述

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

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,)}'

但是不清楚如何正确地在索引中指定逗号

解决方法

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

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

输出:

MGB-322

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

,

使用OP的代码修复程序: 认为如果发生的次数多于origin,则将$NF更改为{以下代码中的{1}}。在https://ideone.com/xjv2we

中进行了编写和测试
$2


awk -F"origin/" '{print $NF}' Input_file 在这里也可能会有所帮助,通用解决方案基于第一次出现的逗号和/根据OP的线程标题。我已经在移动设备上编写了此代码,因此目前无法对其进行测试,并且将在一段时间后对其进行测试。

sed
,

“我需要剪掉MGB-322。”
您可以分两个步骤使用cut

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

我希望与awk(已经被其他人烦恼)或sed

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

为什么会生成proc? 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

c.f。 https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html