Bashスクリプトが欲しい:
- 現在のディレクトリ内のすべてのファイルに対して「strings」コマンドを実行します。
- 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
また、見ることができます