助け合いフォーラム
LinuC Lv1-101(Ver10.0)
問題ID : 14855
問題を開く
検索パターンをファイルから読み込むgrepコマンドのオプションは次のうちどれか。
正解
-f
解説
grepコマンドの書式と主なオプションは以下のとおりです。
grep [オプション] 検索パターン [ファイル名]

上表より正解は「-f」です。
例)「test.txt」ファイルから、行頭が「#」ではない行を表示する場合

その他の選択肢については上表をご確認ください。
grep [オプション] 検索パターン [ファイル名]

上表より正解は「-f」です。
例)「test.txt」ファイルから、行頭が「#」ではない行を表示する場合

その他の選択肢については上表をご確認ください。
参考
【正規表現】
正規表現とは、文字列の特定のパターンを認識する為に使用する表現方法です。文字列の検索や置換などを行う際に利用します。正規表現には基本正規表現(BRE: Basic Regular Expression)と拡張正規表現(ERE: Extended Regular Expression)があります。
以下は主な正規表現とその使用例をまとめたものです。

なお、正規表現の「*」と、シェルによって解釈されるメタキャラクタの「*」では意味が異なるので注意してください。シェルは「*」を0文字以上の文字列と解釈します。
正規表現は明示的に「'」(シングルクォーテーション)や「"」(ダブルクォーテーション)の引用符で囲う事ができます。これらの引用符で囲まれた正規表現の記号は、シェルにメタキャラクタとして扱われなくなります。
正規表現を利用する主なコマンドには「sed」「grep」があります。
■sed
ファイルや標準入力の内容を編集して表示するコマンド
例1)「test.txt」ファイルの「#」から始まる行を削除して出力する場合
$ sed '/^#/d' test.txt
例2)「test.txt」ファイルの空行を削除して出力する場合
$ sed '/^$/d' test.txt
※正規表現では「^」は行頭、「$」は行末の意味であるため、「^」と「$」の間に文字を挟まずつなげることで、文字が存在しない行(空行)を表します。
■grep
ファイルや標準入力から、検索パターンにマッチする文字列を含む行を抽出するコマンド
例)1から5までのいずれかの文字がある行を「test.txt」ファイルから抽出する場合
$ grep '[1-5]' test.txt
[基本正規表現と拡張正規表現]
基本正規表現と拡張正規表現の違いに注意してください。
grepコマンドは、-Eオプションを付けない場合は検索パターンを基本正規表現と判断します。
grepコマンドの検索パターンで拡張正規表現を使うには、-Eオプションを指定します(egrepコマンドと同様)。
例)拡張正規表現「+」を使った抽出

なお、拡張正規表現の「?」「+」は、基本正規表現では「\?」「\+」で同様の指定ができます。
例)基本正規表現で「+」を扱う場合

正規表現とは、文字列の特定のパターンを認識する為に使用する表現方法です。文字列の検索や置換などを行う際に利用します。正規表現には基本正規表現(BRE: Basic Regular Expression)と拡張正規表現(ERE: Extended Regular Expression)があります。
以下は主な正規表現とその使用例をまとめたものです。

なお、正規表現の「*」と、シェルによって解釈されるメタキャラクタの「*」では意味が異なるので注意してください。シェルは「*」を0文字以上の文字列と解釈します。
正規表現は明示的に「'」(シングルクォーテーション)や「"」(ダブルクォーテーション)の引用符で囲う事ができます。これらの引用符で囲まれた正規表現の記号は、シェルにメタキャラクタとして扱われなくなります。
正規表現を利用する主なコマンドには「sed」「grep」があります。
■sed
ファイルや標準入力の内容を編集して表示するコマンド
例1)「test.txt」ファイルの「#」から始まる行を削除して出力する場合
$ sed '/^#/d' test.txt
例2)「test.txt」ファイルの空行を削除して出力する場合
$ sed '/^$/d' test.txt
※正規表現では「^」は行頭、「$」は行末の意味であるため、「^」と「$」の間に文字を挟まずつなげることで、文字が存在しない行(空行)を表します。
■grep
ファイルや標準入力から、検索パターンにマッチする文字列を含む行を抽出するコマンド
例)1から5までのいずれかの文字がある行を「test.txt」ファイルから抽出する場合
$ grep '[1-5]' test.txt
[基本正規表現と拡張正規表現]
基本正規表現と拡張正規表現の違いに注意してください。
grepコマンドは、-Eオプションを付けない場合は検索パターンを基本正規表現と判断します。
grepコマンドの検索パターンで拡張正規表現を使うには、-Eオプションを指定します(egrepコマンドと同様)。
例)拡張正規表現「+」を使った抽出

なお、拡張正規表現の「?」「+」は、基本正規表現では「\?」「\+」で同様の指定ができます。
例)基本正規表現で「+」を扱う場合

grep -fで使用する「検索パターン」とは
投稿日 2023/12/25
以下、解説を引用。
$cat test.txt
#PINGT
PingT
#pingt
.*
$
$cat pattern
^[^#]
$
$grep -f pattern test.txt
PingT
.*
上記の内、「$cat pattern」がよくわかりません。patternの中にあらかじめ検索パターンを記述して変数のように扱っているのでしょうか。
o
ojixii
2023/12/25 20:42
「pattern」というのは grep の検索条件(検索パターン)が書かれたテキストファイルですね。
「cat pattern」では、cat コマンドにファイル pattern を指定して中身を参照しています。
ファイルの中身「^[^#]」が大事で、このファイルの中身(検索パターン)を参照して
grep -f が動作しますよ ということだと思います。
ファイル pattern の中身は検索パターンが書かれているだけですので、
中身を抜き出した「grep '^[^#]' test.txt」も同じ動作をするはずです。
コメント
この投稿に対して返信しませんか?
b blue_2015
2023/12/25 16:51
自分でも調べていますが、「pattern」とはスクリプトファイルという認識で合っていますでしょうか。