Sed 如何将一个10位数的电话号码分成两部分

Sed 如何将一个10位数的电话号码分成两部分,sed,ksh,Sed,Ksh,例如,我得到一个电话号码,如9191234567,我如何将其分为两部分,第一部分包含三个前导数字919,另一部分包含其余七个数字1234567?然后,我想将这两部分存储到ksh中的两个不同变量中 我不知道是否可以使用sed?您可以尝试以下方法: echo "9191234567" | sed 's/^\([0-9]\{3\}\)\([0-9]\{7\}\)$/\1 \2/' 要将每个部分存储在单独的变量中,可以执行以下操作: phone="9191234567" part1=$(echo $p

例如,我得到一个电话号码,如
9191234567
,我如何将其分为两部分,第一部分包含三个前导数字
919
,另一部分包含其余七个数字
1234567
?然后,我想将这两部分存储到
ksh
中的两个不同变量中

我不知道是否可以使用
sed

您可以尝试以下方法:

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部分第2部分

将打印
919-1234567
cut
应该可以工作

echo '9191234567' | cut --characters 1-3,4- --output-delimiter ' '
919 1234567

使用
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

纯ksh,取数字,打印为两个单独的字符串,用空格分隔

function split_at_third {
    typeset number=$1 a b
    b=${number#???} && a=${number%$b}
    print $a $b
}

把它们分成两部分,然后用它们做什么?在0-2的子字符串和3-9的另一个子字符串之间用空格将它们写入stdout@JoachimIsaksson:分离后,我想将这两部分存储到两个不同的脚本变量中,可以这样做吗?谢谢。我可以将这些
\1
\2
存储到两个脚本变量中吗?很好的技巧,Eric!但是看起来操作员
哎哟。。。好啊我用dash,所以我不知道。我以为它得到了支持。我想你必须使用第二种解决方案是的,第二种解决方案效果很好。遗憾的是,bash在AIX机器中并不总是可用的:(@QiangXu,如果您的ksh版本没有here字符串,它可能有进程替换:
read part1 part2function split_at_third {
    typeset number=$1 a b
    b=${number#???} && a=${number%$b}
    print $a $b
}