我有一个包含美国电话号码的文本文件。我正在编写一个shell脚本,将它们转换为E.164格式。
我想我只需要删除除数字以外的所有字符,然后在前面添加“ +1”。因此,如果电话号码看起来像(800) 123-4567
或1-800-123-4567
,则应将其设置为+18001234567
。
如何仅使用shell脚本来做到这一点?
答案 0 :(得分:1)
只是壳
#!/bin/sh
phonefile="numbers"
exec 0< "${phonefile}"
outfile="e164"
exec 1> "${outfile}"
IFS='()- '
while read number
do
if [ -z "${number%%1*}" ] ; then
printf "+"
else
printf "+1"
fi
printf "%s" ${number}
printf "\n"
done
更一般的版本:
#!/bin/sh
numberfilter() {
local phonefile="$1"
local outfile="$2"
local filter="$3"
local countrycode="$4"
exec 3<&0
exec 0< "${phonefile}"
exec 4<&1
exec 1> "${outfile}"
local oldIFS="$IFS"
IFS='()- '
while read number
do
case ${number} in
+*) ;;
011*) number=${number#011} ; printf '+' ;;
00*) number=${number#00} ; printf '+' ;;
1*) printf '+' ;;
*) printf "+${countrycode}" ;;
esac
printf '%s' ${number}
printf '\n'
done
IFS="${oldIFS}"
exec 0<&3
exec 3<&-
exec 1<&4
exec 4<&-
}
numberfilter numbers e164_1 '()- ' 1
numberfilter numbers e164_55 '()- ' 55