メタキャラについて

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-5-9 18:16
takaotu5  新米   投稿数: 1
LPIC 101 問題ID: 22351

<問題>
「test.txt」ファイルから、「.*」という文字列を含む行を抽出したい。適切なコマンドは次のうちどれか

<疑問>
「egrep '.*' test.txt」という選択肢が不正解になってます。
理由は「-F」オプションがないからという理由ですが
シングルクウォーテで囲めばメタキャラは文字列として扱われるので
問題ないと思うのですが何が間違いなのでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-5-9 22:57 | 最終変更
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
シングルクウォーテで囲めばメタキャラは文字列として扱われるので
問題ないと思うのですが何が間違いなのでしょうか?
実際にやってみました
$ cat test.txt
.*
....
!!!!
test
text
$ egrep '.*' test.txt
.*
....
!!!!
test
text
$ egrep -F '.*' test.txt
.*
シングルクォーテーションで囲んでるのは.*という文字列なので、シェルには.*という文字列として渡されます。
そしてシェルがegrepコマンドに.*という文字列を渡してコマンドが実行されるのですが、その時点でegrepは「検索パターン(=拡張正規表現)として.*が渡された」と認識するので、-Fオプションを付けないと、「任意の文字列(任意の1文字の0回以上の繰り返し)」を検索することになります。
よって、上記の通りすべての行が選択されてしまうため、誤りになるんですね。

以前似たような質問があったので、こちらも見てみてください。
http://ping-t.com/modules/forum/index.php?topic_id=2618

  >フォーラム検索へ


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