0

Ubuntu ファイルで複数のキーワードを検索しようとしています。私は1つのファイルに対してそれを行う方法を知っています:

find /[myRep] -type f | xargs grep -rl "myFunction"

でインスタンス化できるすべてのファイルを取得するために、myFunctionとなどの 2 つのキーワードに対して実行したかったのです。myClassmyFunctionmyClass

私は使用しようとしました:

find /[myRep] -type f | xargs grep -rl "myFunction" | xargs grep -rl "myClass"

結果が得られますが、これが正確かどうかはわかりません。さらに、「OR」コマンドや「NOT」コマンドなど、検索にさらに論理的な条件を追加する簡単な方法があるのだろうか...

4

2 に答える 2

2

論理 OR 条件に正規表現の代替を使用する

「myFunction」または「myClass」のいずれかを含むファイルを見つけようとしている場合は、拡張正規表現を交互に使用できます。次に例を示します。

# Using GNU Find and GNU Grep
find . exec grep --extended-regexp --files-with-matches 'myFunction|myClass' {} +

ファイルのリストを grep に渡すと、いずれかの単語を含む一致するファイルが表示されます。

論理積はややこしい

順序付けを考慮する必要があるため、論理 AND はよりトリッキーです。次のいずれかを実行できます。

  1. 一連の要件でファイルをフィルタリングしてから、別の要件でファイルをフィルタリングします。
  2. 状態を保存できる、よりフル機能のプログラムを使用してください。

最初のケースの簡単な例として:

# Use nulls to separate filenames for safety.
find /etc/passwd -print0 |
    xargs -0 egrep -Zl root |
    xargs -0 egrep -Zl www

2 番目のケースの不自然な例として、GNU awk を使用できます。

# Print name of current file if it matches both alternates
# on different lines.
find /etc/passwd -print0 |
    xargs -0 awk 'BEGIN {matches=0};
                  /root|www/ {matches+=1};
                  matches >= 2 {print FILENAME; matches=0; nextfile}'
于 2013-04-13T14:16:04.943 に答える