30

grep の出力を別の grep の検索パターンとしてパイプするにはどうすればよいですか?

例として:

grep <Search_term> <file1> | xargs grep <file2>

最初の grep の出力を 2 番目の grep の検索語として使用したい。上記のコマンドは、最初の grep の出力を 2 番目の grep のファイル名として扱っています。2 番目の grepのオプションを使用してみ-eましたが、どちらも機能しません。

4

9 に答える 9

19

xargs-iスイッチを使用する必要があります。

grep ... | xargs -ifoo grep foo file_in_which_to_search

-iこれは、 (この場合)の後にオプションを取り、fooコマンド内で出現するすべてのオプションを最初の の出力に置き換えますgrep

これは次と同じです。

grep `grep ...` file_in_which_to_search
于 2009-10-21T11:27:41.640 に答える
13

試す

grep ... | fgrep -f - file1 file2 ...
于 2009-01-12T23:52:23.300 に答える
10

Bash を使用している場合は、バックティックを使用できます。

> grep -e "`grep ... ...`" files

-eフラグと二重引用符は、ハイフンで始まるイニシャルからの出力がgrep2 番目のオプションとして解釈されないようにするためにありますgrep

二重引用符のトリック (grep からの出力が単一のパラメーターとして扱われることも保証します) は、Bash でのみ機能することに注意してください。(t)csh では動作しないようです。

バッククォートは、あるプログラムからの出力を別のプログラムのパラメーター リストに取得する標準的な方法であることにも注意してください。(f)grep のように stdin からパラメータを読み取る便利な方法がすべてのプログラムにあるわけではありません。

于 2009-01-12T23:47:17.583 に答える
5

現在のディレクトリ内のファイル名 (find を使用して検出) に特定のパターンが含まれるファイル (grep を使用) 内のテキストを検索したいと考えていました。次のコマンドを使用しました。

 grep -i "pattern1" $(find . -name "pattern2")

ここで、 pattern2はファイル名のパターンであり、pattern1はpattern2に一致するファイル内で検索されるパターンです。

編集:厳密にはパイピングではありませんが、それでも関連しており、非常に便利です...

于 2012-06-21T21:10:25.117 に答える
3

これは、リストからファイルを検索するために使用するものです。

ls -la | grep 'file-in-which-to-search'
于 2013-10-08T14:35:30.753 に答える
2

これは答えではないので、ルールを破っても大丈夫です。これらのソリューションを機能させることができないことに注意してください。

% fgrep -f test file

正常に動作します。

% cat test | fgrep -f - file
fgrep: -: No such file or directory

失敗します。

% cat test | xargs -ifoo grep foo file 
xargs: illegal option -- i
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]
             [-L number] [-n number [-x]] [-P maxprocs] [-s size]
             [utility [argument ...]]

失敗します。大文字の I が必要であることに注意してください。私がそれを使用する場合、すべてが良いです。

% grep "`cat test`" file

一致する用語の行を返すだけでなく、一致がgrep: line 3 in test: No such file or directory見つからない各ファイルの行も返すという点で機能します。

何か足りないのですか、それとも Darwin ディストリビューションまたは bash シェルの違いですか?

于 2015-07-02T21:51:10.413 に答える
-1

$() を使用して次のコマンドが機能することがわかりました。最初のコマンドを括弧内に挿入して、シェルに最初に実行させます。

grep $(dig +short) file

これを使用して、ホスト名が与えられたときに IP アドレスのファイルを調べます。

于 2012-06-07T13:07:47.313 に答える