助け合いフォーラム

LPIC

LPIC Lv1-101(Ver5.0)

grepコマンドの正規表現について

公開日 2022/09/21

以下の問題、「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ジャムおじさん」
みたいな行も抽出されます(されました)。


コメント

k kondo0804

2022/09/22 08:57

ご回答ありがとうございます。 正規表現の「.」は必ずしも1文字ではないということですね。

d dandyleopon

2022/09/23 23:52

うん??「.」はあくまで任意の1文字ですよ。 grepで任意の1文字を「含む」行を抽出しているってことです。 1文字を含むってことは、2文字だろうが3文字だろうが「任意の1文字」が含まれてるので、 抽出の対象になってるってことだと思うのですが…伝わりますかね…

k kondo0804

2022/09/24 17:53

すみません、ようやく分かりました。ご教授頂きありがとうございました。

この返信に対して
コメントを記入できます

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/24 17:55

ご回答ありがとうございます。 grepの意味と正規表現の理解が足りておりませんでした。 ご教授頂きありがとうございました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?