Re: 問題ID: 34214
arashi1977
居住地: 広島
投稿数: 1715
引用:「左右どちらかの文字列を取得する」ということは「どちらかしか取得されない」という話になってしまいますよね。
じゃあってことで別の例でやってみると
演算子の両側の文字列が結果として出てます。これはまぁ a か c のどちらかが出るのでおかしくないでしょう。
しかし、このパターンだと
abcdeが出ます。ac以外の文字(bde)がどうして出るの?って疑問が生まれるようだと、(e)grep の挙動を誤解しています。
正規表現で「文字列1|文字列2 → 文字列1、文字列2のどちらかにマッチする」のは間違いないのですが、(e)grepではその正規表現をつかって行ごとに判定するのです。
なので34214の設問でいうと、「egrep 'taro|hanako' test.txt」とすると
となります。そして、私が2つ目に例示したものを使うと
となります。
「行ごとに、マッチする文字列があるか」という観点でもう一度見直してみてください。
下記の問題に関して、問題文が「taro」か「hanako」
だったら納得できるのですが、問題文が「taro」と「hanako」表記でこの回答になるのが納得できません。「|」は左右どちらかの文字列を取得する拡張正規表と認識していたのですが、誤っているのでしょうか?
じゃあってことで別の例でやってみると
$ cat test.txt
a
b
c
d
e
$ egrep 'a|c' test.txt
a
c
しかし、このパターンだと
$ cat test2.txt
abcde
fghij
klmno
$ egrep 'a|c' test2.txt
abcde
正規表現で「文字列1|文字列2 → 文字列1、文字列2のどちらかにマッチする」のは間違いないのですが、(e)grepではその正規表現をつかって行ごとに判定するのです。
なので34214の設問でいうと、「egrep 'taro|hanako' test.txt」とすると
taro ← taro にマッチするので、結果として出力する
hanako ← hanako にマッチするので、結果として出力する
jiro ← taro にも hanako にもマッチしないので出力しない
sachiko ← 同上
saburo ← 同上
emiko ← 同上
$ cat test2.txt
abcde
fghij
klmno
$ egrep 'e|f' test2.txt
abcde ← e にマッチするので、結果として出力する
fghij ← f にマッチするので結果として出力する
(klmnoの行はどちらにもマッチしないので出ない)
「行ごとに、マッチする文字列があるか」という観点でもう一度見直してみてください。
投稿ツリー
-
問題ID: 34214
(nakate, 2020-8-7 11:10)
- Re: 問題ID: 34214 (arashi1977, 2020-8-7 11:51)
- Re: 問題ID: 34214 (nakate, 2020-8-7 23:48)