1

複数のファイルを検索する bash スクリプトを作成しています。

私が遭遇している問題は、bash スクリプトにパラメーターとして渡された未定の数の変数を egrep できないことです。

私はそれを次のようにしたい:

乱数のパラメータが与えられます。すなわち:

./searchline.sh A B C

最初のものに対して grep を実行し、残りの結果を egrep します。

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".

前もって感謝します。

フェルナンド

4

2 に答える 2

2

ここで再帰を使用して、必要な数のパイプを取得できます。

#!/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 "$@"
于 2013-08-08T13:05:36.263 に答える