いくつかの大きなテキストファイルがあり、ファイルUNIQS.txt
grep
への文字列のリストがあります 別のファイルから。私が使用するコードは
grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
これは何もしません–生成されたファイルは空です。しかし、私がそうするとき
grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
正しく動作します。 grep
とは思わなかったので、これは私を混乱させます UNIQS.txt
のエントリを解釈します ファイルに引用符やスラッシュなどがない正規表現パターンとして(存在しません)。一般に、ファイルからパターンを取得している場合、それらは正規表現パターンであると自動的に見なされますか?
編集: UNIQS.txt
内 ファイルには、フォームの改行で区切られた文字列があります
HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783
(テンプレート名と呼ばれます)およびファイルEEP_VSL...
タブ区切りの列で、約14列で、最初の列はテンプレート名なので、基本的にはファイル内の各テンプレートに対応する行を抽出します。
承認された回答:
-f
オプションは、grepがパターンを読み取るファイルを指定します。これは、コマンドラインでパターンを渡すのと同じです(-e
を使用) 複数ある場合はオプション)。ただし、シェルから呼び出す場合は、パターン内の特殊文字がシェルによって展開されないように、パターンを引用符で囲む必要がある場合があります。
引数-E
または-F
または-P
、もしあれば、パターンが書かれている構文をgrepに伝えます。引数がない場合、grepは基本的な正規表現を期待します。 -E
を使用 、grepは拡張正規表現を想定しています。 -P
を使用 (サポートされている場合)、grepはPerl正規表現を期待します。 -F
を使用 、grepはリテラル文字列を想定しています。パターンがコマンドラインからのものかファイルからのものかは関係ありません。
文字列は部分文字列であることに注意してください。a+b
を渡すと パターンとして、a+b+c
を含む行 一致しています。指定された文字列の1つだけを含み、それ以上を含まない行を検索する場合は、-x
を渡します。 オプション。