如何使用bash解析字符串以获取数字

时间:2016-08-12 23:17:07

标签: regex bash

我有以下字符串:

PR-1769|7bb12d4152a497cef491e0a1088b3984ad92972f|jaga|

如何使用bash解析上面的字符串,以便得到1769

另外,如何使用bash获取最后一个字符串jaga

3 个答案:

答案 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]+"
  1. 第一次回显字符串并重定向到grep

  2. 在第一次迭代中,grep正在提取并输出PR-1769

  3. PR-1769在第二次迭代中再次重定向到grep,现在提取并输出1769

  4. 这只是解决方案的第一个版本,一些grep正则表达式专家肯定会知道如何使用单个grep调用。

    如果回显的字符串采用 PR-NUMBER 格式,它只会为您提供结果,如您所示。

答案 2 :(得分:0)

可以使用awk完成:

actionApp()