0
私は、リストを検索するために複数の用途を扱うスクリプトを作成しています。長い話を短く、私はこのようなDBを照会し、基本的なリストを持っています:提供された文字列を使用して複数列のリスト内のテキストをグレープ
sdc 10:0 KQJWBE11
sdd 10:1 KSDJFBQK
sde 10:2 13KN13DD
sdf 10:3 123DJN1O
sdg 10:4 213JBDKJ
sdh 10:5 N2QQWMNE
sdi 10:6 QKEWJDQJ
sdj 10:7 QKWJEDWE
sdk 20:0 QEDQWEDQ
sdl 20:1 1234E13L
sdm 20:2 KQNE2OUN
sdn 20:3 QN2NK3JN
sdo 20:4 23J23EN2
sdp 20:5 2WBNEKNW
sdq 20:6 QWEDKJNW
sdr 20:7 QWEDQEDD
これらは変数「$ {TABLE_FORMAT}」に存在し、テーブルに同じように、上記のようにフォーマットされます。
#... other logic above this
# Query via primary and secondary location. Example: DISK_ARG="10:1"
elif [[ ${DISK_ARG} =~ ([[:digit:]]:[[:digit:]])+$ ]]; then
DISK_ARG_PRIMARY=$(echo "${DISK_ARG}" | cut -d: -f1)
DISK_ARG_SECONDARY=$(echo "${DISK_ARG}" | cut -d: -f2)
echo -e "${HEADER}"
echo -e "${TABLE_FORMAT}" | grep -Ei "($DISK_ARG_PRIMARY):($DISK_ARG_SECONDARY)"
fi
# Query secondary location. Example: DISK_ARG="5"
elif [[ ${DISK_ARG} =~ ([[:digit:]])+$ ]]; then
DISK_ARG_F2="$(echo "${F2}" | grep -Ei "([[:digit:]]):(${DISK_ARG})")"
DISK_ARG_PRIMARY=$(echo "${DISK_ARG_F2}" | cut -d: -f1)
DISK_ARG_SECONDARY=$(echo "${DISK_ARG_F2}" | cut -d: -f2)
echo -e "${TABLE_FORMAT}" | grep -Ei "($DISK_ARG_PRIMARY):($DISK_ARG_SECONDARY)"
fi
else :
fi
動作しない問題のある行が第二のelifである:
echo -e "${TABLE_FORMAT}" | grep -Ei "($DISK_ARG_PRIMARY):($DISK_ARG_SECONDARY)"
grep: Unmatched (or \(
この時点で、現在の変数は以下のとおりです。
DISK_ARG_PRIMARY="10 20"
DISK_ARG_SECONDARY="5 5"
私は次のように出力としてレンダリングしたいです:
sdh 10:5 N2QQWMNE
sdp 20:5 2WBNEKNW
私はgrepで何らかのタイプの配列を構築したり、何らかの形でIFSを変更することでこれが達成できるかどうかは不明です。私は、スクリプトが多くの入力を処理し、関連するフィールドのマッチを探すようにしたい。あなたのケースでは