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
我有一行需要将分支名称剪切到第一个逗号:
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