データベース名セットを使用して各データベース名に接続し、それに対してストアドプロシージャを実行するbashスクリプトがあります。ストアドプロシージャの出力から値を取得し、スクリプトの残りの部分で使用する必要があります。ほとんどの出力は次のとおりです。
CONDBAT= 10000 MDBAT= 400 ADBAT= 143 QUEDBAT= 167924 INADBAT= 0
その後、一部のデータベースの出力が空白なしで異なることを確認しました。
CONDBAT=4000 MDBAT=1200 ADBAT=263 QUEDBAT=7924 INADBAT=0
QUEDBATの後に値を取得し、変数として保存する必要があります。私の問題は、両方の出力の値を取得できないことです。私は多くのコマンドを試しました。たとえば、
grep -Eo 'QUEDBAT=([[:space:]]+[^[:space:]]+){1}'
grep -vE -e 'QUEDBAT=[[:space:]]{4}' -e '^[^[:space:]]*$'
grep -oP '(?<=QUEDBAT\=)(\s+)?\K([^ ]*)'
ただし、両方の出力の値は返されません。スペースを無視してQUEDBATの後に値を取得するには?
1 つのスクリプトにはすべてのデータベースからのすべての出力が必要なため、個別のスクリプトを作成することはできません。ストアドプロシージャを実行するたびに値が変わるため、各セクションの値が3桁か4桁かどうかはわかりません。また、時には出力順序が同じではないため、 との間=
のコンテンツも取得できません。ADBAT
ベストアンサー1
+
はい1つ以上。あなたはしなければ*
なりません0以上:
grep -Po '\bQUEDBAT=\s*\K\d+'
または:
pcregrep -o1 '\bQUEDBAT=\s*(\d+)'
または、移植性のために実際のエントリ(P
上記の/ represents)を使用します。p
perl
perl -lne 'print $1 while /\bQUEDBAT=\s*(\d+)/g'
perl -lne 'print for /\bQUEDBAT=\s*(\d+)/g'
perl
(あるいは、主にテキスト処理に関連している場合は、スクリプト全体を書くことがより適切かもしれません)。