Shell-重构连接数字的字符串正则表达式



我正在尝试重新引用我的脚本,使其可读,并且仍然可以在一行中使用。

我的脚本做:

  • 字符串(GXXRXXCXX(上的正则表达式,用于将所有匹配的数字放入数组
  • 数组中所有字符串的字符串编号(0X->X(
  • 所有带有'的数字的联接。'分隔符
  • 最后,它在字符串的开头添加一个'v'

我最想引用的部分是在不使用任何tmp变量的情况下将数组编号(3 2 1(转换为联接(3.2.1(。

代码:

GOROCO=G03R02C01
version=v$(tmp=( $(grep -Eo '[[:digit:]]+' <<< $GOROCO | bc) ); echo "${tmp[@]}" | sed 's/ /./g')

过程:

G03R02C01
03 02 01
3 2 1
3.2.1
v3.2.1

使用单个sed可以执行以下操作:

GOROCO='G03R02C01'
version=$(sed -E 's/[^0-9]+0*/./g; s/^./v/' <<< "$GOROCO")
# version=v3.2.1

详细信息:

  • -E:在sed中启用扩展正则表达式模式
  • s/[^0-9]+0*/./g:用一个点替换所有后跟0或更多零的非数字
  • s/^./v/:用字母v替换第一个点

作为一项学术练习,这里有一个纯粹的bash等效于做同样的事情:

shopt -s extglob
version="${GOROCO//+([!0-9])*(0)/.}"
version="v${version#.}"

您正在寻找paste

$ grep -Eo '[[:digit:]]+' <<< $GOROCO | bc | paste -s -d"."
3.2.1

相关内容

  • 没有找到相关文章

最新更新