我有以下字符串:
PR-1769|7bb12d4152a497cef491e0a1088b3984ad92972f|jaga|
如何使用bash解析上面的字符串,以便得到1769
?
另外,如何使用bash获取最后一个字符串jaga
?
答案 0 :(得分:2)
这里不需要grep
:bash具有内置的正则表达式支持,使用 比使用外部实用程序处理单行:
re='^PR-([0-9]+)'
s='PR-1769|7bb12d4152a497cef491e0a1088b3984ad92972f|marvel|'
if [[ $s =~ $re ]]; then
echo "Matched: ${BASH_REMATCH[1]}"
fi
您还可以使用参数扩展:
s='PR-1769|7bb12d4152a497cef491e0a1088b3984ad92972f|marvel|'
s="${s%%'|'*}" # trim off everything after the first |
s="${s#PR-}" # trim off the leading PR
echo "$s"
顺便提一下,如果您需要提取单个字段,read
可能是该作业的正确工具:
s='PR-1769|7bb12d4152a497cef491e0a1088b3984ad92972f|marvel|'
IFS='|' read -r pr hash username <<<"$s"
...以上内容将PR-1769
放入变量pr
,将7bb12d4152a497cef491e0a1088b3984ad92972f
放入变量hash
,将marvel
放入变量{{1} }}。要剥离username
,可能只是看起来像:
PR-
...或者,打印提取的用户名:
echo "${pr#PR-}"
请参阅:
答案 1 :(得分:0)
基于发布,
使用grep
echo 'PR-1769|7bb12d4152a497cef491e0a1088b3984ad92972f|marvel|' | grep -Po "(PR-)([0-9]+)" | grep -Po "[0-9]+"
第一次回显字符串并重定向到grep
在第一次迭代中,grep正在提取并输出PR-1769
PR-1769
在第二次迭代中再次重定向到grep,现在提取并输出1769
这只是解决方案的第一个版本,一些grep正则表达式专家肯定会知道如何使用单个grep调用。
如果回显的字符串采用 PR-NUMBER 格式,它只会为您提供结果,如您所示。
答案 2 :(得分:0)
可以使用awk完成:
actionApp()