私は次のような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
反対など、他のものは異なる場合があります。)