grepへの複数入力

grepへの複数入力

Unix grepで複数の入力を使用できますか?これが私がしたいことです:

pip freezeインストールされているすべてのPythonパッケージを一覧表示しますが、残念ながらそのパッケージの依存関係も一覧表示します。

cat requirements/base.txtマイプロジェクトパッケージの一覧

pip freeze | grep $(cat requirements/base.txt)私は成功せずに同様のものを使用しようとしました。

私が興味のあるパッケージだけを実際にリストするためにpip凍結をフィルタリングする方法を知っている人はいますか?

ベストアンサー1

コマンドを実行するには、コマンドの置き換えの周りに二重引用符を入れます。たとえば、次のbase.txtファイルを考えてみましょう。

$ cat base.txt
simplegeneric==0.8.1
six==1.10.0
sympy==1.1

引用符がない場合、コマンドは一連のエラーを生成します。引用符を使用するとうまく動作します。

$ pip3 freeze | grep "$(cat base.txt)"
simplegeneric==0.8.1
six==1.10.0
sympy==1.1

より良い点は、正規表現構文に慣れていない場合は、grepが各行を通常の文字列として-F解釈するようにこのオプションを使用する方が安全です。base.txtここには違いはありませんが、将来の驚きを避けるのに役立ちます。

$ pip3 freeze | grep -F "$(cat base.txt)"
simplegeneric==0.8.1
six==1.10.0
sympy==1.1

それでも良いです(帽子のヒント:ナシル・ライリー-f)、以下を使用せずにファイルから文字列を読み取るには、このオプションを使用しますcat

$ pip3 freeze | grep -Ff base.txt
simplegeneric==0.8.1
six==1.10.0
sympy==1.1

おすすめ記事