3

query.txt があるとします。

クエリ.txt:

cat
dog
123

今、それらを使用したいのは、grep を使用して myDocument.txt 内の行を検索するためのクエリです。

cat queries.txt | xargs grep -f myDocument.txt

myDocument には次のような行があります

cat
i have a dog
123
mouse

最初の 3 行を返す必要があります。しかし、そうではありません。代わりに、grep はそれらをファイル名として検索しようとします。私は何を間違っていますか?

4

2 に答える 2

7

ここでは、次のものが必要です。

grep -f queries.txt myDocument.txt

これによりgrep、 はファイルから正規表現を読み取り、queries.txtそれらを に適用しますmyDocument.txt

バージョンでは、xargs効果的に次のように書いていました。

grep -f myDocument.txt cat dog 123

絶対に を使用するxargs必要がある場合は、次のように記述する必要があります。

xargs -I % grep -e % myDocument.txt < queries.txt

catこれにより、 からの標準入力をリダイレクトすることで、UUOC — 無用な使用 — を回避できますqueries.txt。オプションを使用して-I %、置換テキストをコマンド ラインのどこに配置するかを指定します。この-eオプションを使用すると、パターンがたとえば--helpである場合、(GNU)grepがそれを引数として扱う (したがって、そのヘルプ メッセージを出力する) という問題に遭遇することはありません。

于 2013-09-07T00:49:18.027 に答える
1

grep -eオプションは、パターン文字列を引数として取ります。-f引数を、パターンを含むファイルのファイル名として扱います。

于 2013-09-07T00:14:34.913 に答える