文字を挿入する前にsedを使用して特定の数の数を検出するにはどうすればよいですか? ###-###-####

文字を挿入する前にsedを使用して特定の数の数を検出するにはどうすればよいですか? ###-###-####

電話番号の形式をテキストファイルとして指定する必要があります。 (はい)と表示されます。8014516912

-最初の3つの数字の後に1つを挿入し、-他の3つの数字の後に別の数字を挿入できるようにフォーマットをどのように指定しますか?801-451-6912

電話番号を含むすべての回線に対してこれを行うにはどうすればよいですか?電話番号はテキストの間にあるため、番号が常に同じインデックスにあるとは限りません。たとえば、次のようになります。

atewfnwieug 8204919561
adw 8915617141

ベストアンサー1

これには数量子が必要です。

sed -r 's/\b([0-9]{3})([0-9]{3})([0-9]{4})\b/\1-\2-\3/' your_file

この-rスイッチは拡張正規表現をサポートしますが、POSIXではないため、より移植可能なソリューションは次のとおりです。

perl -pe 's/\b([0-9]{3})([0-9]{3})([0-9]{4})\b/$1-$2-$3/' your_file

拡張正規表現では、数量子は前の原子と少なくとも1回、最大回数を一致させることを{n,m}意味します。たとえば、数量子は次のように表現できます。省略は上限がないことを意味します。で書くことができます。最後に、平均は前の原子と正確に一致します。nm?{0,1}m+{1,}{n}n

必要に応じて、実際に拡張正規表現を使用する必要はありませんsed。基本的な正規表現形式が読みにくいからです。

sed 's/\b\([0-9]\{3\}\)\([0-9]\{3\}\)\([0-9]\{4\}\)\b/\1-\2-\3/' your_file

おすすめ記事