Shell 脚本 (bourne and/or bash) 多行正则表达式
Shell script (bourne and/or bash) RegEx over Multiple Lines
如何在 Shell 脚本 (bourne and/or bash) 中实现以下目标...类似于我能做的, 在文件上使用 RegEx(下面的内容示例)
- 我需要匹配模式,然后 -
- 将'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)
如何在 Shell 脚本 (bourne and/or bash) 中实现以下目标...类似于我能做的, 在文件上使用 RegEx(下面的内容示例)
- 我需要匹配模式,然后 -
- 将'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)