簡體   English   中英

Grep多個bash參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM