如何使用Shell脚本将美国电话号码转换为E.164格式?

时间:2019-03-18 13:31:55

标签: shell

我有一个包含美国电话号码的文本文件。我正在编写一个shell脚本,将它们转换为E.164格式。

我想我只需要删除除数字以外的所有字符,然后在前面添加“ +1”。因此,如果电话号码看起来像(800) 123-45671-800-123-4567,则应将其设置为+18001234567

如何仅使用shell脚本来做到这一点?

类似问题

1 个答案:

答案 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