現在のディレクトリ内のすべてのファイルから複数の文字列を検索するbashスクリプトを作成する方法は?

現在のディレクトリ内のすべてのファイルから複数の文字列を検索するbashスクリプトを作成する方法は?

Bashスクリプトが欲しい:

  1. 現在のディレクトリ内のすべてのファイルに対して「strings」コマンドを実行します。
  2. grepを使用して、各ファイルの文字列出力から特定の用語を検索します。

以下がありますが、スクリプト出力に一致する項目は表示されません。

#!/bin/bash

echo "Searching files in directory for secrets and urls"

for file in ./*
do
   echo "=====$file====="
   strings ${file} | egrep -wi --color 'secret\|password\|key\|credential|\http'
done

私もそれを試しましたがうまくstrings $file | egrep -wi --color 'secret\|password\|key\|credential|\http'いかeval "strings ${file} | egrep -wi --color 'secret\|password\|key\|credential|\http'"ないようです。スクリプトはファイル名を出力しますが、一致するものは出力しません。

ベストアンサー1

を使用するegrepのと同じですgrep -E。つまり、拡張正規表現を使用できます。

拡張|正規表現は代替項目(使用する項目)であり、\|リテラル|文字と一致します。

だからあなたは欲しい

grep -w -i -E 'secret|password|key|credential|http'

または

grep -i -E '\<(secret|password|key|credential|http)\>'

where\<\>単語の境界と一致します。

または

grep -w -i -F \
    -e secret      \
    -e password    \
    -e key         \
    -e credential  \
    -e http

...正規表現一致ではなく文字列比較を実行したい場合。

また、変数の拡張には常に二重引用符を使用することをお勧めします。また、名前にスペース文字(スペース、タブ、改行)を含むファイルと、ファイル名ワイルドカード(*、、、)を含む?ファイルを正しく処理できます。[...]

#!/bin/sh

for name in ./*; do
    [ ! -f "$name" ] && continue    # skip non-regular files

    printf '==== %s ====\n' "$name"
    strings "$name" | grep ...
done

また、見ることができます

おすすめ記事