助け合いフォーラム
以下の問題、「grep '1234.' test.txt」を実行した結果の回答は、12344、123445、0123499の3つとなっておりますが、「1234.」は「文字列1234の後に任意の1文字」を意味するのであれば、0123499は回答として正しくないのではないでしょうか。任意の1文字とあるのに99と2文字あるのはなぜでしょうか。ご教授お願い致します。
以下の「test.txt」ファイルに対して、「grep '1234.' test.txt」コマンドを実行した時に出力される行はどれか。(全て選択)
$ cat test.txt
123
1223
1233
12344
123445
0123499
2022/09/21 23:44
「grep '1234.'」 は '1234<任意の1文字>'を含む 行が抽出されるのがポイントかなと思います。
'1234<任意の1文字>' のパターンにマッチするのであれば前後に何文字あろうが関係なく、
「アンパンマン1234ジャムおじさん」
みたいな行も抽出されます(されました)。
コメント
2022/09/24 00:38
任意の1文字とあるのに99と2文字あるのはなぜでしょうか。
この理屈でいくと、「0123499(1234の後ろに2文字)」だけじゃなくて「123445(1234の後ろに2文字)」も正しくないと言う話になると思うのですが、こちらには疑問はなかったのでしょうか?
dandyleoponさんもおっしゃっている通り「.は任意の1文字であり、 1234{任意の1文字} と言う形が含まれる行がマッチする」ので
1234: マッチしない(1234の次に何もない)
1234a: マッチする(1234の次に1文字=aがある)
01234: マッチしない(1234の次に何もない)
123456: マッチする(1234の次に1文字=5があり、その後ろに1文字=6がある)
0123499: マッチする(1234の次に1文字=9があり、その後ろに1文字=9がある)
と言うだけの話ですよ。
コメント
この投稿に対して返信しませんか?
k kondo0804
2022/09/22 08:57
ご回答ありがとうございます。 正規表現の「.」は必ずしも1文字ではないということですね。