将多个 grep 输出合并到一个变量中

将多个 grep 输出合并到一个变量中

基本上我有以下场景例如

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

有什么方法可以将两个命令的结果存储到变量中,例如使用逗号作为分隔符,

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)"

变量=$(..)称为命令替换它的意思就是运行 shell 命令并将其输出存储到变量或使用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")"

输出是由换行符分隔的两个数字(假设每个模式恰好匹配一次)。它们由换行符分隔的原因是 grep 输出行(与任何其他工具一样),并且行始终以换行符结尾。第一个在末尾grep打印换行符,第二个在末尾打印换行符,然后命令替换在末尾删除换行符。如果您想要逗号作为分隔符,请使用两个命令替换,并在其之间包含逗号:15grep20

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

相关内容