助け合いフォーラム
Linux Essentials(Ver1.6)
問題ID : 2979
問題を開く
ファイル「file.txt」から、文字列「cat」または「cats」を含む行を、全て抽出したい。
下線部に当てはまる正規表現はどれか。
$ grep -E '____' file.txt
下線部に当てはまる正規表現はどれか。
$ grep -E '____' file.txt
正解
cats?
解説
以下は主な正規表現です。
文字「?」は、直前の文字の0回または1回の繰り返しを意味します。
以上より正解は
・cats?
です。
なお、「?」は拡張正規表現(基本的な正規表現が拡張されたもの)です。grepコマンドで使用する際はオプション「-E」を指定しなくてはなりません(-Eを指定しない場合、「?」はただの文字として扱われます)。
以下はコマンドの実行例です。
例)ファイル「file.txt」から、文字列「cat」または「cats」を含む行を抽出する
その他の選択肢については以下の通りです。
・^cats
行頭が「cats」で始まる行のみを抽出します。
その他の位置にある「cat」または「cats」は抽出できないため、誤りです。
・cat[s]
「cats」を含む行のみを抽出します([]内には、通常は複数の文字を指定します)。
「cat」については抽出できないため、誤りです。
・cats$
行末が「cats」で終わる行のみを抽出します。
その他の位置にある「cat」または「cats」は抽出できないため、誤りです。
・cats.
「cats」の後ろに任意の一文字がある行(catsA、catsXなど)を抽出します。
「cat」または「cats」そのものは抽出できないため、誤りです。
文字「?」は、直前の文字の0回または1回の繰り返しを意味します。
以上より正解は
・cats?
です。
なお、「?」は拡張正規表現(基本的な正規表現が拡張されたもの)です。grepコマンドで使用する際はオプション「-E」を指定しなくてはなりません(-Eを指定しない場合、「?」はただの文字として扱われます)。
以下はコマンドの実行例です。
例)ファイル「file.txt」から、文字列「cat」または「cats」を含む行を抽出する
その他の選択肢については以下の通りです。
・^cats
行頭が「cats」で始まる行のみを抽出します。
その他の位置にある「cat」または「cats」は抽出できないため、誤りです。
・cat[s]
「cats」を含む行のみを抽出します([]内には、通常は複数の文字を指定します)。
「cat」については抽出できないため、誤りです。
・cats$
行末が「cats」で終わる行のみを抽出します。
その他の位置にある「cat」または「cats」は抽出できないため、誤りです。
・cats.
「cats」の後ろに任意の一文字がある行(catsA、catsXなど)を抽出します。
「cat」または「cats」そのものは抽出できないため、誤りです。
参考
【正規表現】
正規表現とは、文字列の特定のパターンを認識する為に使用する表現方法で、文字列の検索や置換などを行う際に利用します。
以下は正規表現の一部とその使用例です。
※「?」は、拡張正規表現(基本的な正規表現が拡張されたもの)の一つ。grepコマンドに使用する場合は「-E」オプションの指定が必要。
正規表現は、grepコマンドやsedコマンド(ファイルや標準入力の内容を編集して表示するコマンド)で使用することで非常に強力なパターンマッチングを行うことができます。
【正規表現とgrepコマンド】
ファイルや標準入力から、正規表現のパターンにマッチする文字列を含む行を抽出するにはgrepコマンドを利用します。
grepコマンドの書式と主なオプションは以下のとおりです。
例)ファイル「file.txt」から、「Linux Essentials」に該当する行を抽出する
例)ファイル「file.txt」から、大文字小文字にこだわらず「Linux Essentials」という文字列を抽出する
例)ファイル「file.txt」から、「Linux Essentials」にマッチした行数を表示する
例)ファイル「file.txt」から、「Linux Essentials」にマッチしない行を表示する
オプションは組み合わせることも可能なため、「マッチしない行数」を表示する場合は「-cv」などと指定します。
●正規表現を用いた例
例)ファイル「file.txt」から、aから始まるアルファベット3文字以上の単語がある行を抽出する
例)ファイル「file.txt」から、文字「b」を含む行を抽出する
例)ファイル「file.txt」から、文字列「cat」または「cats」を含む行を抽出する
例)ファイル「file.txt」から、abcdeのいずれかの数字がある行を抽出する
例)行の先頭が「#」で始まる行を抽出する
例)空行(何も入力されていない行)以外を抽出する
ファイルの先頭(^)と末尾($)に何も文字がないことから、「^$」は空行を意味します。
例)文字「$」を含む行を抽出する
「$」は正規表現で末尾を意味しますが、文字として用いたい場合はエスケープ文字「\」を使用します。
正規表現とは、文字列の特定のパターンを認識する為に使用する表現方法で、文字列の検索や置換などを行う際に利用します。
以下は正規表現の一部とその使用例です。
※「?」は、拡張正規表現(基本的な正規表現が拡張されたもの)の一つ。grepコマンドに使用する場合は「-E」オプションの指定が必要。
正規表現は、grepコマンドやsedコマンド(ファイルや標準入力の内容を編集して表示するコマンド)で使用することで非常に強力なパターンマッチングを行うことができます。
【正規表現とgrepコマンド】
ファイルや標準入力から、正規表現のパターンにマッチする文字列を含む行を抽出するにはgrepコマンドを利用します。
grepコマンドの書式と主なオプションは以下のとおりです。
例)ファイル「file.txt」から、「Linux Essentials」に該当する行を抽出する
例)ファイル「file.txt」から、大文字小文字にこだわらず「Linux Essentials」という文字列を抽出する
例)ファイル「file.txt」から、「Linux Essentials」にマッチした行数を表示する
例)ファイル「file.txt」から、「Linux Essentials」にマッチしない行を表示する
オプションは組み合わせることも可能なため、「マッチしない行数」を表示する場合は「-cv」などと指定します。
●正規表現を用いた例
例)ファイル「file.txt」から、aから始まるアルファベット3文字以上の単語がある行を抽出する
例)ファイル「file.txt」から、文字「b」を含む行を抽出する
例)ファイル「file.txt」から、文字列「cat」または「cats」を含む行を抽出する
例)ファイル「file.txt」から、abcdeのいずれかの数字がある行を抽出する
例)行の先頭が「#」で始まる行を抽出する
例)空行(何も入力されていない行)以外を抽出する
ファイルの先頭(^)と末尾($)に何も文字がないことから、「^$」は空行を意味します。
例)文字「$」を含む行を抽出する
「$」は正規表現で末尾を意味しますが、文字として用いたい場合はエスケープ文字「\」を使用します。
問題文について
k
kreha
投稿日 2024/09/17
文字列「cat」または「cats」を含む行を抽出したい。という問題文ですが、「または」ですので、cat,catsどちらかが抽出できれば正解になるのではないかと思いました。
間違いの選択肢である、^catsやcats$も行頭・行末にcatsがあれば抽出されると思います。
また、file.txtの中身が問題文に無い、行頭や行末の指定もないです。
この問題はcatとcatsどちらも含むものを正解としていると認識しておりますが、いかがでしょうか?
問題文の解説、または修正をお願い致します。
2024/09/18 08:09
確かに。「または」ではなく「および」とかならわかります。
また、file.txtの中身が問題文に無い、行頭や行末の指定もないです。
ここはまぁそういうものです。どのような内容であったとしても設問の条件に合う行が抽出できる検索文字列を問われているので、 file.txt
がどのような内容であったとしても設問の条件を満たすものを選べば良いので。
この問題はcatとcatsどちらも含むものを正解としていると認識しておりますが、いかがでしょうか?
ここは同じ認識です。
コメント
スタッフからの返信
この投稿に対して返信しませんか?
s staff_ueda
2024/09/20 04:25
kreha 様 ご指摘の点を修正致しました。 ご報告、誠にありがとうございました。