linux Bash命令检查命令输出中的字符串是否匹配

5us2dqdw  于 2022-12-26  发布在  Linux
关注(0)|答案(2)|浏览(165)

我有以下命令输出

$ /opt/CrowdStrike/falconctl -g --aid | grep 'aid='
aid="fdwe234wfgrgf34tfsf23rwefwef3".

我想检查aid=后面(“”内)是否有字符串。如果有字符串,命令返回代码应为0,如果没有值,则返回代码应为!=0
有人能帮助扩展这个命令以获得所需的输出吗?
我的想法是确保如果aid=没有任何值,我的bash脚本就会失败。

zkure5ic

zkure5ic1#

你可以使用正则表达式来检查双引号内是否存在一个或多个字符,也可以使用正则表达式捕获组来提取该值:

if [[ $(/opt/CrowdStrike/falconctl -g --aid | grep 'aid=') =~ ^aid=\"(.+)\"$ ]]; then
  aid=${BASH_REMATCH[0]}
  echo "aid is $aid"
else
  echo "aid not found"
fi

注意,我使用的正则表达式是.+,它表示1个或更多字符,因为你要求字符串非空,这与通常的.*正则表达式相反,它应该是0个或更多字符。

laximzn5

laximzn52#

我的系统上没有falconctl,因此为了模拟它的输出,我将使用两个文件:

$ head falcon*out
==> falcon.1.out <==
some stuff
aid="fdwe234wfgrgf34tfsf23rwefwef3".
some more stuff

==> falcon.2.out <==
some stuff
aid=""
some more stuff

一个grep创意:

grep -Eq '^aid="[^"]+"' <filename>

其中:

  • -E-启用扩展regex支持
  • -q-以静默/安静模式运行(抑制所有输出)
  • 可以从$?捕获返回代码

试驾:

for fname in falcon*out
do
    printf "\n############# %s\n" "$fname"
    cat "$fname" | grep -Eq '^aid="[^"]+"' "$fname"
    echo "return code: $?"
done

这将产生:

############# falcon.1.out
return code: 0

############# falcon.2.out
return code: 1

相关问题