问题描述
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