質問: Linux grepコマンドの-f オプションについて、 grep -f 検索文字リストが書かれたファイル 検索対象ファイル という使い方があると存じますが、 検索文字リストが書かれたファイルには、文字数制限はありますか? 2000バイトほどあるファイルを検索文字リストとしたところ、 文字列が確かに検索対象ファイルに存在するのに、 存在しないことになっていました。 また、文字列が間違っているのかと思い、 ファイルを逆にしたら、 その文字列が検索対象ファイルに存在するという結果になっていました。 よろしくおねがいします。 例 検索文字リストhoge.txtの中身 var/www/aaaaa var/www/bbbbb var/www/ccccc .... 2000バイト 検索対象ファイルhoge2.txtの中身 aaaaa var/www/を削除 sed -i -e 's/var\/www\///' hoge.txt 「\」はエスケープです。 検索対象ファイルから検索文字リストに含まれる文字を検索 grep -f hoge.txt hoge2.txt 結果 表示なし 逆で試してみる grep -f hoge2.txt hoge1.txt 結果 aaaaa
回答: まず、同じような質問を何度も投稿するのは止めましょう。 質問は編集できるので、適宜編集してください。 結局、hoge.txtは、 ``` aaaaa bbbbb ccccc ・・・ ``` と言うことですよね。 であれば、どちらも`aaaaa`という結果になるはずですが。 日本語の読解を間違っているのではないでしょうか? 「検索文字リスト」というのは、「検索する文字列」を1行に1つずつ書いたものです。 「検索対象ファイル」というのは、そのファイルから「検索する文字列」を探すという行為の対象です。 つまり、`grep -f hoge.txt hoge2.txt`は、「aaaaa」という文字列だけのファイルの中から、「aaaaa」と「bbbbb」と「ccccc」を探すという意味です。 `grep -f hoge2.txt hoge1.txt`は、「aaaaa」「bbbbb」「ccccc」という複数行ファイルの中から、「aaaaa」という文字列を探すと言うことです。