見つかった正規表現セットを使用して他の関数を評価するためにbashを使用する関数出力の正規表現

見つかった正規表現セットを使用して他の関数を評価するためにbashを使用する関数出力の正規表現

出力には、次のようなbash関数FUNCTION_Aがあります。

    ID          HELD_SINCE  HOLD_REASON
    123456.0   7/1  20:40 Peak usage: 2370 megabytes.
    123457.0   7/1  20:40 Peak usage: 5008 megabytes.

その後、FUNCTION_Bに渡すには、ID number合計の後に数字を取得する必要があります。Peak usage:

手動で実行すると、次のようになります。

FUNCTION_B 123456.0 2370
FUNCTION_B 123457.0 5008

私は正規表現を使ってこれらの2つの数を取得し、シェルでランダムな数を実行するbashスクリプトを書こうとしていますFUNCTION_A。いくつかの異なる場所にあります。

出力を1行ずつ繰り返す方法がわからず、なぜ配列に出力がないのかわかりませんが、次のようなことをしたいと思います。

re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
for line in FUNCTION_A output
   if [[ line =~ $re ]]; then
      myArray=($(echo s | egrep -Eo re))
      eval FUNCTION_B ${myArray[0]} ${myArray[1]}
   fi  

ベストアンサー1

Bashでキャプチャブラケットを使用できます。BASH_REMATCH変数

function_A_output=$(FUNCTION_A)

re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
while IFS= read -r line; do
   if [[ $line =~ $re ]]; then
      FUNCTION_B "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
   fi  
done <<<"$function_A_output"

要件はありませんeval

使うプロセスの交換、$function_A_output変数は必要ありません。

re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
while IFS= read -r line; do
   if [[ $line =~ $re ]]; then
      FUNCTION_B "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
   fi  
done < <$(FUNCTION_A)
# ....^ that space is intentional

おすすめ記事