【问题标题】:Set a grep result into multiple variables将 grep 结果设置为多个变量
【发布时间】:2019-07-09 12:43:33
【问题描述】:

我有一个脚本可以检查 macOS 上的证书身份。

security find-identity -v | grep my-cert.test.com

结果是:

1) 13DB7FSDF188E2C4454KK33E5E0A7B4LK6714658 "my-cert.test.com"
2) 5L56971E29DFA20LHD5E2CEA9DF6J7C46C2D0FD5 "my-cert.test.com"
3) JS34KL78LG620CJKMDFBV5K1K56MNCL9M6SD61L "my-cert.test.com"`

使用awk 提取身份

security find-identity -v | grep my-cert.test.com | awk '{ print $2}’

结果是:

13DB7FSDF188E2C4454KK33E5E0A7B4LK6714658 
5L56971E29DFA20LHD5E2CEA9DF6J7C46C2D0FD5 
JS34KL78LG620CJKMDFBV5K1K56MNCL9M6SD61L

这意味着我有 3 个证书,并且使用 awk 我已将其余证书分开,只是在多个结果之间使用空格提取身份。现在我想将上面的grep 结果设置为一个变量。如果grep结果为3行,如上,将它们设置在不同的变量中。我知道我可以使用 var=$(...) 将其放入单个变量中,但我希望将结果分开。

例子:

ONE=13DB7FSDF188E2C4454KK33E5E0A7B4LK6714658
TWO=5L56971E29DFA20LHD5E2CEA9DF6J7C46C2D0FD5
THREE=JS34KL78LG620CJKMDFBV5K1K56MNCL9M6SD61I4

如果有更多,请继续。

我需要这个,以便我可以在后续脚本中使用这些变量。 grep 输出可以是任意数量的行,1 或更多。

【问题讨论】:

  • 如果您需要单独处理每个值,也可以使用xargs。

标签: bash macos shell awk command-line


【解决方案1】:

您能否尝试以下操作,您可以将awk 的结果保存到一个数组中,然后您也可以在程序中进一步使用该数组的值。 (我从您的尝试中删除了grep,因为awk 可以自己处理字符串部分的搜索。)

CRT=($(security find-identity -v | awk '/my-cert.test.com/{ print $2}'))

现在您可以通过以下方式访问(所有数组时间)名为 CRT 的数组。

count=0
for i in "${CRT[@]}"
do
  echo "CRT["$count"]=$i"
  count=$((count + 1))
done

这就是数组存在的原因 - 如果我们需要单独存储许多相同类型的值,但不是使用 N 个变量,而是使用数组并通过数组索引访问各个值。

【讨论】:

  • 我无法在 CRT=($(security find-identity -v | awk '/$hostname /{ print $2}')) 中使用可验证的 $hostname 在我的 in 中可以使用 CRT=$(security find-identity -v | grep $hostname | awk '{ print $2}’) 但在使用数组时会出错。
  • @Skull,在awk shell 变量不能这样工作,使用like(只是一个例子)awk -v host="$HOSTNAME" '{print host}' Input_file,根据你的需要使用它,让我知道它是怎么回事,看这个链接也有一次stackoverflow.com/help/someone-answers
【解决方案2】:
set - $CRT; index=0; while [ "$1" ]; do let index=$index+1; eval var${index}="$1"; shift; done

这将为您拥有的尽可能多的身份创建变量 var1、var2 等。

【讨论】:

  • 虽然确实,数组几乎肯定是更好的解决方案。
  • 同意,如果您的 shell 支持数组。
猜你喜欢
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多