問題ID:22553について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2017-8-26 12:21
A_Kato  新米   投稿数: 2
問題ID:22553のついて教えていただけないでしょうか?


問題文の「大文字アルファベットを含まない行」という記述より

 grep -v '[A-Z]' test.txt

が正解となるのは理解できるのですが、同時に選択肢として出てくる

 grep '[^A-Z]' test.txt → [A-Z]の範囲の否定(^)

でも同じ動作になる(正答)となるような気がしているのですが、
両者の違いはあるのでしょうか?
(「含まない」という意図を汲み取って-vオプションを使用している方が正解ということでしょうか?)

解説文の「大文字アルファベット以外の文字(小文字アルファベットなど)を含む行を表示しますので、誤りです。」という記述がいまいちピンとこずにいます。

よろしくお願い致します。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-8-26 12:51 | 最終変更
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
解説文の「大文字アルファベット以外の文字(小文字アルファベットなど)を含む行を表示しますので、誤りです。」という記述がいまいちピンとこずにいます。
ちょっと実行例を確認してみましょう。設問の通りのファイルを用意しました。
$ cat test.txt
NAME
grep, egrep, fgrep - print lines matching a pattern
SYNOPSIS
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
おっしゃってる '[^A-Z]' で検索すると以下の結果になります。大文字のみの行がなくなっています。
より正しく言うと「大文字以外の文字にマッチする=大文字のみの行にはマッチしない」ということです。
$ grep '[^A-Z]' test.txt
grep, egrep, fgrep - print lines matching a pattern
grep [options] PATTERN [FILE...] ←大文字が含まれている
grep [options] [-e PATTERN | -f FILE] [FILE...] ←大文字が含まれている
こっちが正答のもので、大文字アルファベットを含む行がなくなっています。
-vオプションによって「大文字がマッチしたものを除く」ということですね。
$ grep -v '[A-Z]' test.txt
grep, egrep, fgrep - print lines matching a pattern ←大文字が一つも含まれていない
というのでどうでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-8-26 13:19
A_Kato  新米   投稿数: 2
arashi1977さん

ご回答頂きありがとうございました。
(実行例まで付けていただき、非常に理解の助けになりました)

 grep '[^A-Z]' test.txt
  →「大文字では無い文字が含まれている行」(大文字以外の文字が行内にあると、その文字がマッチしてしまい、大文字が含まれているにも関わらず表示されるので今回の題意に合わないのでNG)


 grep -v '[A-Z]' test.txt
  →「『大文字が含まれている行』の否定(-vオプション)」(今回の題意に合う内容でOK)


ということですね。

無事解決・理解することが出来ました。
ありがとうございました。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.