テキストファイルの電話番号を正規化する方法は?

テキストファイルの電話番号を正規化する方法は?

##########定期的にさまざまな形式(、など)の電話番号###-###-####を含むテキストファイルを受け取ります。(###) ###-###通常10桁ですが、そんなことも見たことがあります+1 (###) ###-####

結局のところ、ファイルはデータベースにインポートされましたが、詳細には説明しないため、電話番号は標準形式で指定されました(###) ###-####

変更されない唯一のことは、電話番号が常に各行の2番目と3番目のタブ文字の間にあることです。

コマンドラインでこれを行う方法はありますか?

ベストアンサー1

文書が説明通りの場合、この内容も適用されます。このコマンドは電話番号の前後の情報を保存し、必要な方法でフォーマットします。出力が良く見える場合は、その場所で編集する-iオプションを追加するか、最後に使用して出力リダイレクトを提供してください。sed> output_file

sed -E "s/(.*\t.*\t)\+?1?[[:space:]]?\(?([0-9]{3})\)?.*([0-9]{3}).*([0-9]{4})(.*)/\1\(\2\)\ \3-\4\5/g" filename

次のテキストを含むファイルでテストしました。

    jfk 902-765-9292 hat jump cat
    jk  902 819 2244 hat jump cat
    98  902 823-4456 hat jump cat
    78h +1 075 242 1566 hat jump cat
jklj    kjlj    +1 075-242-1566 hat jump cat
jk  jkj +1 (075) 242-1566 hat jump cat
    kj  (204) 799-9810 hat jump cat
kj  89  (204)-799-9810 hat jump cat

出力は次のとおりです

    jfk (902) 765-9292 hat jump cat
    jk  (902) 819-2244 hat jump cat
    98  (902) 823-4456 hat jump cat
    78h (075) 242-1566 hat jump cat
jklj    kjlj    (075) 242-1566 hat jump cat
jk  jkj (075) 242-1566 hat jump cat
    kj  (204) 799-9810 hat jump cat
kj  89  (204) 799-9810 hat jump cat

おすすめ記事