複数のgrep出力を1つの変数に結合

複数のgrep出力を1つの変数に結合

デフォルトでは、次のシナリオがあります。

  1. grep 'test: \K(\d+)' $file=> 15
  2. grep 'test1: \K(\d+)' $file=> 20

たとえば、コンマを区切り文字として使用して、2つのコマンドの結果を変数に保存する方法はありますか?

Test="grep 'test: \K(\d+)' $file;grep 'test1: \K(\d+)' $file"

答え=eval $Test

期待される出力:15,20か。

答え1

はい、次のようにすることができます。コマンドの置き換え:

Test="$(grep 'test: \K(\d+)' $file),$(grep 'test1: \K(\d+)' $file)"

変数=$(..)呼び出されたコマンドの置き換えこれが意味するのは、シェルコマンドを実行し、その出力を変数に保存するか、echoコマンドを使用して再表示することです。たとえば、日付と時刻を表示するには、次のようにします。

echo "Today is $(date)"

変数に保存します。

SERVERNAME="$(hostname)"

出力に接続できます。

echo "$(hostname),$(date)"

結果は次のとおりです。

yourhostname,Tue Jan 24 09:56:32 EET 2017

答え2

コマンドの出力を変数に入れるには、次のようにします。コマンドの置き換え、これがまさにそれが使用されることです。使用してもeval役に立ちません(正しく使用してもあなたはそうではありません)。

Test="$(grep 'test: \K(\d+)' "$file"; grep 'test1: \K(\d+)' "$file")"

出力は改行で区切られた2つの数字です(各パターンが正確に1回一致すると仮定)。改行で区切られる理由は、他のツールと同様にgrepが行を出力し、行が常に改行で終わるためです。 1つ目はgrep末尾に改行を印刷し、2番目は末尾に改行を印刷し、置換コマンドは最後の改行を削除します。カンマを区切り文字として使用するには、2つのコマンドの置き換えを2つのコマンドの間にカンマとして使用します。15grep20

Test="$(grep 'test: \K(\d+)' "$file"),$(grep 'test1: \K(\d+)' "$file")"

関連情報