GNU/Linux >> Linux の 問題 >  >> Linux

ファイルからGrepパターンを読み取る?

いくつかの大きなテキストファイルがあり、ファイル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を渡します。 オプション。


Linux
  1. テキストファイル(Bash_historyなど)から「バイナリデータ」を削除するにはどうすればよいですか?

  2. ファイルからテキスト読み取りデータを作成しますか?

  3. Linuxgrepコマンド

  1. 連続ストリームを「grep」する方法は?

  2. LinuxシェルからのSQLクエリを含むCSVファイルの読み取り

  3. install -c は cp とどう違うのですか

  1. 2つのパターンの間(およびそれを含む)の線を印刷しますか?

  2. strace をファイルにリダイレクトする

  3. Linux - 特定の行からファイルの最後までの grep