4

例如,我得到一个电话号码9191234567,我怎么能把它分成两部分,第一部分包含三个前导数字919,另一部分包含其余七位数字1234567?之后,我想将这两个部分存储到ksh.

我不知道这是否可以完成sed

4

5 回答 5

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/')
于 2013-05-30T19:52:24.873 回答
5

cut应该管用

echo '9191234567' | cut --characters 1-3,4- --output-delimiter ' '
919 1234567
于 2013-05-30T19:58:50.407 回答
2
echo 9191234567 | sed 's/^\([1-9]\{3\}\)\([1-9]*\)/\1\-\2/'

将打印919-1234567

于 2013-05-30T19:55:15.747 回答
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
于 2013-05-30T20:56:20.713 回答
0

纯ksh,取数字,打印成两个单独的字符串,用空格隔开。

function split_at_third {
    typeset number=$1 a b
    b=${number#???} && a=${number%$b}
    print $a $b
}
于 2013-06-01T21:48:42.253 回答