如何解决Shell-重构连接数字的字符串正则表达式
我试图重新引用我的脚本,以使其可读并仍可在一行上使用。
我的脚本可以:
- 字符串(GXXRXXCXX)上的正则表达式,它将所有数字匹配到一个数组中
- 要为数组中所有字符串编号的字符串(0X-> X)
- 使用'。分隔符 对所有数字进行连接。
- 最后,它在字符串的开头添加'v'
我最不愿意重新尝试的部分是将数组编号(3 2 1)转换为联接(3.2.1),而不使用任何tmp变量。
代码:
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
在这里,作为一项学术练习,等同于做同样的事:
shopt -s extglob
version="${GOROCO//+([!0-9])*(0)/.}"
version="v${version#.}"
,
您正在寻找merge
paste
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。