find/grep パイプラインの否定検索はレコードを削除しません。

find/grep パイプラインの否定検索はレコードを削除しません。

bash findコマンドを使用するのに少し難しいことがあります。

問題は、* .appstrngを含む* .appファイルからすべてのレコードを削除する要求が遅くなったことです。

以下は、レコードを削除しようとする否定的な試みなしに完全に実行される最初のルックアップパイプラインです。

find . -type f -iname "*.app" -exec grep -we selected_apps -e app_name --color=auto --with-filename {}         \; > LOG.txt

これで、LOG.txtを生成する前に.appstringストリッピングを追加しようとするいくつかの試みがあります。

1) grep -vを使う

find . -type f -iname "*.app" -exec grep -we selected_apps -e app_name -ev "*.appstring" --color=auto --with-filename {} \; > LOG.txt

2) awkを使う

find . -type f -iname "*.app" -exec grep -we selected_apps --color=auto --with-filename {} \; | awk '!/*.appstring/' > LOG.txt

find / grepまたはfind / awkがこのように動作するかどうかわかりません...すべてのコメントを歓迎します!ありがとうございます! !

答え1

元のコマンドを使用し、追加のコマンドを使用していくつかの結果を削除できます。

cat LOG.txt | while read FILE; do
    if ! grep -q "*.appstring" "$FILE"; then
        echo $FILE >> LOG-filtered.txt
    fi
done

関連情報