Adh*_*n37 1 regex bash shell refactoring sed
我正在尝试重构我的脚本以使其可读并且仍然可以在一行中使用。
我的脚本做:
我在重构中最挣扎的部分是在不使用任何 tmp 变量的情况下将数组编号 (3 2 1) 连接到连接 (3.2.1) 中。
代码 :
GOROCO=G03R02C01
version=v$(tmp=( $(grep -Eo '[[:digit:]]+' <<< $GOROCO | bc) ); echo "${tmp[@]}" | sed 's/ /./g')
Run Code Online (Sandbox Code Playgroud)
过程 :
G03R02C01
03 02 01
3 2 1
3.2.1
v3.2.1
Run Code Online (Sandbox Code Playgroud)
使用一个sed你可以做到这一点:
GOROCO='G03R02C01'
version=$(sed -E 's/[^0-9]+0*/./g; s/^\./v/' <<< "$GOROCO")
# version=v3.2.1
Run Code Online (Sandbox Code Playgroud)
细节:
-E: 启用扩展正则表达式模式 seds/[^0-9]+0*/./g: 用一个点替换所有非数字后跟 0 个或多个零s/^\./v/: 用字母替换第一个点 v作为一个学术练习,这里是一个纯粹的 bash 等价于做同样的事情:
shopt -s extglob
version="${GOROCO//+([!0-9])*(0)/.}"
version="v${version#.}"
Run Code Online (Sandbox Code Playgroud)