電話番号を整理するための正規表現

電話番号を整理するための正規表現

sedを使用し、市外局番301の後に209(3012093934、(301)2093935、(301)209-3936)の付いた電話番号を含むテキストファイルをインポートするスクリプトを作成しようとしています。地域番号と電話番号を区切るスペース、ダッシュ、括弧を削除する必要があります。その後、他のファイルに正しい番号を書く必要があります。正しい番号は、地域番号301で始まり、その後に209と正確に4桁が続くことです。

だから私の正規表現は次のように動作しないようです。

sed -n 's/(^301[\- ]*)/(209)/([0-9][0-9][0-9][0-9]$\)/p'

誰でも助けることができますか?よろしくお願いします! ! !

答え1

数字以外の文字をすべて削除し、期待どおりに開始しない行を削除し、最後に長さが10文字以外の行を削除します。

sed -e 's/[^0-9]//g' -e '/^301209/!d' -e '/^.\{10\}$/!d'

答え2

まず、次をtr使用して不要な文字を削除しますgrep

tr -d '() -'|grep '301209[0-9][0-9][0-9][0-9]$'

答え3

sed -n 's/.*\(301\).*\(209\).*\([0-9]\{4\}\)/\1\2\3/w foobar'

これにより、数字以外の文字を無視した後、前のすべての文字301(例(309))とゼロ個以上の空白が発生し、)その後の空白が正確に4桁まで削除されます。出力はに記録されます。301209foobar

答え4

sed -ne '/^ *\(+1\)\{0,1\} *(\{0,1\} *301 *)\{0,1\} *209 *-\{0,1\}\( *[0-9]\)\{4\} *$/s/[^0-9]*//gp'

関連情報