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桁まで削除されます。出力はに記録されます。301
209
foobar
答え4
sed -ne '/^ *\(+1\)\{0,1\} *(\{0,1\} *301 *)\{0,1\} *209 *-\{0,1\}\( *[0-9]\)\{4\} *$/s/[^0-9]*//gp'