例如,我得到一个类似9191234567
的电话号码,如何将其分成两部分,第一部分包含三个前导数字919
,另一部分包含其余七位数字1234567
?之后,我想将这两部分存储在ksh
中的两个不同变量中。
我不知道是否可以使用sed
完成此操作?
答案 0 :(得分:7)
你可以试试这个:
echo "9191234567" | sed 's/^\([0-9]\{3\}\)\([0-9]\{7\}\)$/\1 \2/'
要将每个部分存储在单独的变量中,您可以执行以下操作:
phone="9191234567"
part1=$(echo $phone | sed 's/^\([0-9]\{3\}\)[0-9]\{7\}$/\1/')
part2=$(echo $phone | sed 's/^[0-9]\{3\}\([0-9]\{7\}\)$/\1/')
或者更简洁:
read part1 part2 <<< $(echo "9191234567" | sed 's/^\([0-9]\{3\}\)\([0-9]\{7\}\)$/\1 \2/')
答案 1 :(得分:5)
cut
应该有效
echo '9191234567' | cut --characters 1-3,4- --output-delimiter ' '
919 1234567
答案 2 :(得分:2)
echo 9191234567 | sed 's/^\([1-9]\{3\}\)\([1-9]*\)/\1\-\2/'
将打印919-1234567
答案 3 :(得分:2)
使用bash
$ phone=9191234567
$ regex="^([0-9]{3})([0-9]{7})$"
$ [[ $phone =~ $regex ]] && part1="${BASH_REMATCH[1]}" && part2="${BASH_REMATCH[2]}"
$ echo $part1
919
$ echo $part2
1234567
答案 4 :(得分:0)
纯粹的ksh,取数字,打印成两个单独的字符串,用空格分隔。
function split_at_third {
typeset number=$1 a b
b=${number#???} && a=${number%$b}
print $a $b
}