ファイルがあります -
cat regex30.txt
(914).582.3013
(873).334.2589
(521).589.3147
(625).235.3698
(895).568.2145
(745).256.3369
に変換したいです。
914.582.3013
873.334.2589
521.589.3147
625.235.3698
895.568.2145
745.256.3369
私のステップは次のとおりです。
sed -r 's/\(([0-9]<Space>{3})\)(\.[0-9]{3}\.[0-9]{4})/\1\2/g' regex30.txt
その後、結果が得られます。
(914).582.3013
(873).334.2589
(521).589.3147
(625).235.3698
(895).568.2145
(745).256.3369
なぜこのような結果が出るのですか?スペースがあるのはなぜ重要なのか?
スペースを削除すると正常に動作します。
sed -r 's/\(([0-9]{3})\)(\.[0-9]{3}\.[0-9]{4})/\1\2/g' regex30.txt
914.582.3013
873.334.2589
521.589.3147
625.235.3698
895.568.2145
745.256.3369
私が理解しているように、[0-9] {3}
-は0から始まる3桁の数字を表します。
[0-9]{3}
正規表現との違いは何ですか[0-9] {3}
?
空間があるというのがなぜ重要なのか、それとも同時に見られないのか。
空白を表現するために '\s'を使用したと思いました。
ベストアンサー1
免責事項:正規表現を解析していません。あなたの質問に対する答えは次のとおりです。
[0-9]{3}
正確に小数点以下の3桁を表します。[0-9] {3}
10進数の後に3つのスペースが続くことを示します。これは{3}
(いわゆる「バンドル」と呼ばれる)先行するいわゆる「原子」を繰り返すからです。
正規表現のマニュアルページから:
$ man regex
... An atom followed by a bound containing one integer i and no comma
matches a sequence of exactly i matches of the atom. ...
「原子」という用語は、次の段落で定義される。よく読んだ。