一致後に空白の有無にかかわらず値を取得するには?

一致後に空白の有無にかかわらず値を取得するには?

データベース名セットを使用して各データベース名に接続し、それに対してストアドプロシージャを実行する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)を使用します。pperl

perl -lne 'print $1 while /\bQUEDBAT=\s*(\d+)/g'
perl -lne 'print for /\bQUEDBAT=\s*(\d+)/g'

perl(あるいは、主にテキスト処理に関連している場合は、スクリプト全体を書くことがより適切かもしれません)。

おすすめ記事