grepが一致せず一致しない[重複]

grepが一致せず一致しない[重複]

私は次のようなgrepを持っています:

grep -r --color -L "class public interface" * | grep "authenticate"

「クラスパブリックインターフェイス」は含まれていませんが、ファイルのどこにでも「認証」を含むすべてのファイルを再インポートしたいと思います。

しかし、私が持っているものは期待どおりに動作しません。 「クラスパブリックインターフェイス」は含まれていませんが、「認証」は含まれているため、ファイルが存在する必要があることを知っています。

私の注文に問題がありますか?

ベストアンサー1

-L一致しないファイルコンテンツを検索するのと同じように、一致-lするファイルコンテンツも検索します。

-lしたがって、2番目の「grepping」でフラグを立てる必要があります。

grepまた、最初の出力をコマンドライン引数として2番目の出力として指定する必要があります。これはxargs、標準入力から項目を読み取るツールであることを使用して行うことができます。ファイル名を直接パイピングすると、2番目のgrepはファイル内authenticateの文字列を見つけます。名前

だから、あなたは次のようなものを得る必要があります

grep -r --color -L "class public interface" * | xargs grep -l "authenticate"`

入力はxargsデフォルトですべてのスペースに分割されているため、ファイル名にスペースが含まれている場合(またはより悪い場合)、NULバイトで区切られたファイル名をgrep -Z使用する必要があります。xargs -0(GNU grepの場合はそうです。FreeBSD grepの--null反対など、他のものは異なる場合があります。)

おすすめ記事