在bash中使用数字作为分隔符分割字符串

时间:2018-08-02 11:14:23

标签: bash awk sed

120h2m12s => 120h 2m 12s

120a2b12c => 120a 2b 12c

我想在非数字后面出现数字时进行拆分。

如何在bash中实现这一目标?

这是我到目前为止所尝试的:

  • $ echo "120h2m12s" | sed 's/[hm]/& /g' => 120h 2m 12s(有一些作品,但是我更喜欢一种更通用的解决方案。一种使用数字作为分隔符来分割字符串的方法。)

4 个答案:

答案 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