要求解析输入最多4位数。想获得如下输出:
from `1234` want get `12 34`
from `123` want get `01 23`
from `12` want get `00 12`
from `1` want get `00 01`
例如解析数字表格。
有这个:
case "$1" in
????) sed 's/\(..\)\(..\)$/\1 \2/' <<< "$1" ;;
???) sed 's/\(.\)\(..\)$/0\1 \2/' <<< "$1" ;;
??) sed 's/\(..\)$/00 \1/' <<< "$1" ;;
?) sed 's/\(.\)$/00 0\1/' <<< "$1" ;;
*) echo "usage: NNNN"; exit 1;;
esac
脚本有效,但不是很优雅。它可以“更好”吗?
答案 0 :(得分:4)
这是一个纯粹的BASH实现,不使用任何正则表达式:
func() { printf -v s "%04d" "$1"; printf "%s %s\n" "${s:0:2}" "${s: -2}"; }
func "124"
01 24
func "1234"
12 34
func "2"
00 02
答案 1 :(得分:1)
只需使用printf:
printf %04d $1 | sed 's/\(..\)\(..\)/\1 \2/'
答案 2 :(得分:1)
我认为这会做你想做的事情:
NUMBER=12
printf "%04d" $NUMBER | sed 's/\(..\)\(..\)/\1 \2/'
答案 3 :(得分:0)
另一种bash唯一解决方案:
f=1234
{ read -n2 a; read -n2 b; } <<<$(printf %04d "$f")
echo "$a $b"