Shell 脚本 (bourne and/or bash) 多行正则表达式

Shell script (bourne and/or bash) RegEx over Multiple Lines

如何在 Shell 脚本 (bourne and/or bash) 中实现以下目标...类似于我能做的, 在文件上使用 RegEx(下面的内容示例)

  1. 我需要匹配模式,然后 -
  2. 将'LD_PRELOAD='右边的内容抓取到变量中

文件内容:

blah
blah blah
#Some comment
LD_PRELOAD=/usr/lib64/libstdc++.so.6

export LD_PRELOAD

#more comments

以下 RegEx 在在线 Regex Builder (https://regex101.com/r/XW0JVR/1)

上运行良好
/LD_PRELOAD=(\S+)[\n\r]+^\s*export\s+LD_PRELOAD/gm

我使用 Shell 脚本尝试了以下操作,但它不起作用...

#!/bin/bash
envvars_stdFile="tempEnvVarsStd"

regEx="LD_PRELOAD=(\S+)[\n\r]+^\s*export\s+LD_PRELOAD"

if [[ "${envvars_stdFile}" =~ "${regEx}" ]]
then
    cppLib="${BASH_REMATCH[1]}"
    echo "cppLib is: $cppLib"
else
   echo "RegEx Pattern (${regEx}) doesn't match in file: $envvars_stdFile"
fi

它产生: 正则表达式模式 (LD_PRELOAD=(\S+)[\n\r]+^\s*export\s+LD_PRELOAD) 在文件中不匹配:tempEnvVarsStd

感谢@Cyrus。我最终采纳了他的建议。在这里发布他的建议以获得更多可见性,以供其他人寻找 Shell Script MultiLine RegEx 的类似问题...

variable=$(grep -Poz '^LD_PRELOAD=\K.*(?=(\n.*)*^export LD_PRELOAD$)' file)