我有一系列搜索模式存储在 bash 数组 ( ptrn
) 中,我想将其传递给grep
命令。我该怎么做?
ptrn=("FN" "DS")
for fl in "$@"; do # loop through number of files
if [[ -f "$fl" ]]; then
printf '\n%s%s%s\n\n' "$mgn" "==> $flnm <==" "$rst"
grep --color "$ptrn" "$flnm"
fi
done
如何
grep
通过子 shell 提供模式,例如:如果保证存储为数组元素的模式/单词中没有空格或非转义 shell 特殊字符,则可以使用 的
bash
参数扩展将数组元素作为grep
单独的单独模式传递给-e FN -e DS ...
,例如:|
或者,如果它们可能包含非转义的 shell 特殊字符,您可以围绕(或)构建正则表达式(也拆分所有空格但不会失败)并将其与类似的东西一起使用:|
或者要在每个正则表达式模式中保留精确空间,将每个数组元素作为单独的标记传递,并使用(逻辑或)构建它们的扩展正则表达式,您可以执行以下操作: