120h2m12s
=> 120h 2m 12s
120a2b12c
=> 120a 2b 12c
我想在非数字后面出现数字时进行拆分。
如何在bash中实现这一目标?
这是我到目前为止所尝试的:
$ echo "120h2m12s" | sed 's/[hm]/& /g'
=> 120h 2m 12s(有一些作品,但是我更喜欢一种更通用的解决方案。一种使用数字作为分隔符来分割字符串的方法。)答案 0 :(得分:1)
$ echo '120h2m12s' | sed 's/[0-9]*/ &/g'
120h 2m 12s
如果使用上述方法,您最终会得到一个前导空格,
$ echo '120h2m12s' | sed 's/\([^0-9]\)\([0-9]\)/\1 \2/g'
120h 2m 12s
答案 1 :(得分:1)
您也可以尝试以下操作吗:
echo "120h2m12s" | sed 's/[0-9]*[a-z]*/& /g'
输出如下。
120h 2m 12s
还要检查另一个自制的虚拟示例:
echo "120h2m12s12131313ddd" | sed 's/[0-9]*[a-z]*/& /g'
120h 2m 12s 12131313ddd
答案 2 :(得分:0)
(8-12)
在看到字母后跟数字的位置之间添加一个空格。
答案 3 :(得分:0)
我会用perl,它非常简洁:
echo "$time" | perl -pe 's/(\D)(\d)/$1 $2/g'
但是,如果您想要重击:
$ echo "$time";
120h2m12s
$ while [[ $time =~ ([[:alpha:]])([[:digit:]]+) ]]; do
time=${time/${BASH_REMATCH[1]}${BASH_REMATCH[2]}/${BASH_REMATCH[1]} ${BASH_REMATCH[2]}}
done
$ echo "$time"
120h 2m 12s