現在のディレクトリから複数の単語を検索したいと思います。これを達成するために、私はこのようなものを使用します。
grep -e "word1" -e "word2" -R .
これは素晴らしい作品です。
grep
さらに一歩進んで、改行文字のすべての単語を含む辞書ファイルを作成し、その辞書を使用してコマンドを生成したかったです。
たとえば、次の辞書ファイルがあります。
one
two
three
more
このコマンドを作成したいと思います。
grep -e "one" -e "two" -e "three" -e "more" -R .
私はこれがbash
次のような配列から成ることができることを知っています。
pattern=()
while IFS= read -r line; do
pattern+=("-e" "$line")
done < "$dictionary"
grep "${pattern[@]}" -R .
しかし、POSIX専用のシェルを使ってこれを行うには?
grep
文字列をコマンドで生成し、 を使用して実行できることを知っていますが、eval
辞書ファイルは何でも構いません。これは安全ではないようです。
- どのような解決策がありますか
eval
? - 「安全な」解決策はありますか
eval
?
ベストアンサー1
grep
付属-f
または-F
スイッチを使用したくないですかgrep
?grep
マニュアルページから:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty file contains
zero patterns, and therefore matches nothing. (-f is specified by
POSIX.)
はい
$ grep -F somefile.txt -R .