Trim 行到第一个逗号 (bash)

Trim line to the first comma (bash)

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

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

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

MGB-322, refs/pipelines/36877)

但是如何告诉它 trim 到第一个逗号? 我尝试通过 substr

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

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

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

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

输出:

MGB-322

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

使用 OP 的代码修复: 认为您只出现了 origin 以防出现不止一次在以下代码中将 $NF 更改为 </code>。在 <a href="https://ideone.com/xjv2we" rel="nofollow noreferrer">https://ideone.com/xjv2we</a></p> 中编写和测试 <pre><code>awk -F"origin/" '{print $NF}' Input_file



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

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

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

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

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

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

为什么要生成 proc? bash 的 built-in 参数解析将处理此问题。

如果

$: 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