[英]Grep multiple bash parameters
我正在写一个bash脚本,它将搜索多个文件。
我遇到的问题是我无法将作为参数传递的未确定数量的变量作为参数添加到bash脚本中
我希望它能做到以下几点:
给定随机数量的参数。 即:
./searchline.sh A B C
在第一个上做一个grep,然后用其余的来得到结果:
grep "A" * | egrep B | egrep C
我试图做的是用egreps构建一个字符串:
for j in "${@:2}";
do
ADDITIONALSEARCH="$ADDITIONALSEARCH | egrep $j";
done
grep "$1" * "$ADDITIONALSEARCH"
但不知何故,这将无法奏效,似乎bash并未将“egrep”字符串视为egrep。
你们有什么建议吗?
顺便说一句,作为旁注,我无法创建任何辅助文件,所以grep -f不在我想的范围内。 还要注意,传递给bash脚本的参数数量是可变的,所以我不能做egrep“$ 2”| egrep“3美元”。
提前致谢。
费尔南多
安全评估可能是一个很好的解决方案
#!/bin/bash
if [[ $# -gt 0 ]]; then
TEMP=("grep" "-e" "\"\$1\"" "*")
for (( I = 2; I <= $#; ++I )); do
TEMP=("${TEMP[@]}" "|" "egrep" "-e" "\"\$${I}\"")
done
eval "${TEMP[@]}"
fi
要运行它:
bash script.sh A B C
您可以在此处使用递归来获取所需数量的管道:
#!/bin/bash
rec_egrep() {
if [ $# -eq 0 ]; then
exec cat
elif [ $# -eq 1 ]; then
exec egrep "$1"
else
local pat=$1
shift
egrep "$pat" | rec_egrep "$@"
fi
}
first_arg="$1"
shift
grep "$first_arg" * | rec_egrep "$@"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.