余談です| cut -D: -f1
が、 grep はファイル名のコロンをエスケープしないため、使用は安全ではありません。私が何を意味するかを見るために、これを試すことができます:
ghoti@pc:~$ echo bar:baz > foo
ghoti@pc:~$ echo baz > foo:bar
ghoti@pc:~$ grep -Hr ba .
./foo:bar:baz
./foo:bar:baz
透明度はありません。
では、探しているものを明確にしましょう。
- 複数のファイルから 1 つの文字列を検索しますか? または、
- 1 つのファイルで複数の文字列を検索しますか?
前者の場合、次のように動作する可能性があります。
#!/bin/bash
if [[ "$#" -lt 2 ]]; then
echo "Usage: `basename $0` string file [file ...]
exit 1
fi
what="$1"
shift # discard $1, move $2 to $1, $3 to $2, etc.
for where in "$@"; do
grep -HlR "$what" "$where" -R
done
後者の場合は、次のようになります。
#!/bin/bash
if [[ "$#" -lt 2 ]]; then
echo "Usage: `basename $0` file string [string ...]
exit 1
fi
where="$1"
shift
for what in "$@"; do
grep -lR "$what" "$where"
done
もちろん、文字列を or バーで連結してから egrep を使用すると、これは合理化される可能性があります。あなたが実際に探しているものに依存します。