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