助け合いフォーラム
Linux Essentials(Ver1.6)
問題ID : 2651
問題を開く
ファイル「file.txt」から、grepコマンドを用いて、「a」から始まるアルファベット3文字以上の単語のある行を抽出したい。
正しいコマンドはどれか。
正しいコマンドはどれか。
正解
grep 'a..' file.txt
解説
以下は主な正規表現です。
以上より正解は
・grep 'a..' file.txt
です。
例)ファイル「file.txt」から、aから始まるアルファベット3文字以上の単語がある行を抽出する
その他の選択肢については以下の通りです。
・grep 'a**' file.txt
・grep 'a*' file.txt
・grep 'a*.' file.txt
「a*」は、aが0回以上繰り返していることを意味しますから、aがない行も抽出されます。
本例の場合「# aa」「b」などすべての行が該当してしまいます。
・grep 'a\\' file.txt
文字aと文字\の組み合わせを抽出しています。
以上より正解は
・grep 'a..' file.txt
です。
例)ファイル「file.txt」から、aから始まるアルファベット3文字以上の単語がある行を抽出する
その他の選択肢については以下の通りです。
・grep 'a**' file.txt
・grep 'a*' file.txt
・grep 'a*.' file.txt
「a*」は、aが0回以上繰り返していることを意味しますから、aがない行も抽出されます。
本例の場合「# aa」「b」などすべての行が該当してしまいます。
・grep 'a\\' file.txt
文字aと文字\の組み合わせを抽出しています。
参考
【正規表現】
正規表現とは、文字列の特定のパターンを認識する為に使用する表現方法で、文字列の検索や置換などを行う際に利用します。
以下は正規表現の一部とその使用例です。
※「?」は、拡張正規表現(基本的な正規表現が拡張されたもの)の一つ。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のいずれかの数字がある行を抽出する
例)行の先頭が「#」で始まる行を抽出する
例)空行(何も入力されていない行)以外を抽出する
ファイルの先頭(^)と末尾($)に何も文字がないことから、「^$」は空行を意味します。
例)文字「$」を含む行を抽出する
「$」は正規表現で末尾を意味しますが、文字として用いたい場合はエスケープ文字「\」を使用します。
「アルファベット3文字以上の単語」?
投稿日 2024/05/16
正解は「grep 'a..' file.txt」となっていますが、この正規表現では「a10」のような数字混じりの文字列もヒットします。
正解をそのままにするなら、問題文のタイトルにある部分は「3文字以上の文字列」等になるのではないでしょうか?
問題文をそのままにするなら、正解は「grep -E 'a[a-z]{2}' file.txt」、
もしくは「grep 'a[a-z][a-z]' file.txt」等を選ぶ事になるのでは?と思います。
2024/05/16 12:13
正解をそのままにするなら、問題文のタイトルにある部分は「3文字以上の文字列」等になるのではないでしょうか?
「aから始まる3文字以上の文字列」に「aから始まるアルファベット3文字」は含まれないのでおかしい、ということでしょうか?
他の選択肢では
「a」から始まるアルファベット3文字以上の単語のある行
を抽出することはできず、また正答選択肢であれば設問の要件を満たしているようですが、問題点として指摘したいのはなんでしょうか?
コメント
この投稿に対して返信しませんか?
k kirara397
2024/05/16 17:12
コメントありがとうございます。 問題点として指摘したいのは、正答のコマンドでは「aから始まるアルファベット3文字」以外の文字列(a10等)も抽出できてしまう点です。 ただ、抽出結果に不純物が混じっても構わない前提なら、問題ないと思います。