スラッシュ、ダッシュ、閉じ括弧など、3つの区切り文字に基づいてCSVフィールドを3つの列に変換したいと思います。)/-
(031)540-6622
021-886-3877
555/532-2662
これは私が見なければならないでしょう:
031 540 6622
021 886 3877
555 532 2662
実際、私は次のスキーマを変換する簡単で迅速な方法を探しています。
(###)###-#### \
###-###-#### |---> ###-###-####
###/###-#### /
次に、ダッシュで区切られたフィールドをスペース区切り文字を含む3つのフィールドに変換します。
答え1
GNU sedを使用してください。先行を削除し(
、 を空白に置き換えます。-
)
/
sed 's/^(//; y|-)/| |' file
出力:
031 5440 6622 021 8886 3877 555532 2662
答え2
スラッシュ、ダッシュ、閉じ括弧など、3つの区切り文字に基づいてCSVフィールドを3つの列に変換したいと思います。
)/-
awk
次の3つの区切り文字を設定FS
し、3つの列を取得して(
最初の列から最初の文字を削除できます。
awk -v FS='[)-/]' '{gsub(/^\(/,"",$1);print $1,$2,$3}' file
031 540 6622
021 886 3877
555 532 2662
答え3
オプション1
データに常に区切り文字がある3つの数値ブロックが含まれている場合は、次のことを行う必要があります。
grep -Eo "[0-9]+" phone.txt \
| paste -d- - - -
これはいいえ電話番号が3ブロック離れていると正しく機能します。あなたの要件の1つではありませんが、どのように機能するかしなければならないこれは、1行に複数の電話番号が含まれている場合、または電話番号が複数行にまたがる場合(各番号に正確に3つのブロックが含まれている限り)に機能します。
崩れる
grep -Eo "[0-9]+" phone.txt
連続した数値ブロックが抽出され、結果は行ごとに1つのブロックに分類されます。
paste -d- - - -
各行がハイフンで区切られた3つのブロックとして表示されるようにデータを拡張します。
オプション2
またはデータの一貫性が低下した場合:
sed -r 's/[^0-9]+/-/g;s/^-//;s/-$//' phone.txt
崩れる
s/[^0-9]+/-/g
数字以外の数字はハイフンに置き換えてください。
s/^-//
すべての先行ハイフンを削除
s/-$//
末尾のハイフンを削除します。