大学の課題をやろうとしていましたが、現在詰まっています。目標は、電話番号のいくつかを読み、最初の3桁の数字の順序を反転して括弧内に入れることです。電話番号を読むことはできますが、数字は読み取れません。
たとえば、次のようになります。
214 4234-5555
例: 出力
412 4234-5555
これが私が今まで持っているものです
sed -r "s/([0-9]), ([0-9]), ([0-9])/\3\2\1/g" phone.txt
ベストアンサー1
OPの試みを修正
$ cat ip.txt
214 4234-5555
foo 123 4533-3242
$ sed -r 's/([0-9])([0-9])([0-9])/\3\2\1/' ip.txt
412 4234-5555
foo 321 4533-3242
$ # adding parenthesis as well
$ sed -r 's/([0-9])([0-9])([0-9])/(\3\2\1)/' ip.txt
(412) 4234-5555
foo (321) 4533-3242
$ # if ERE is not supported
$ sed 's/\([0-9]\)\([0-9]\)\([0-9]\)/(\3\2\1)/' ip.txt
(412) 4234-5555
foo (321) 4533-3242
- 一部の
sed
実装では代わりに-E
必要です。-r
- 補間が必要ない場合は、単一引用符を使用してください。https://mywiki.wooledge.org/Quotes
([0-9]), ([0-9]), ([0-9])
カンマとスペースで区切られた3桁の数字と一致します。g
その行のすべての項目を変更するには、修飾子が必要です。
一般的なソリューションでは、反転する桁数を数値引数として定義します。
$ perl -pe 's/\d{3}/reverse $&/e' ip.txt
412 4234-5555
foo 321 4533-3242
$ perl -pe 's/\d{3}/sprintf "(%s)", scalar reverse $&/e' ip.txt
(412) 4234-5555
foo (321) 4533-3242