如何在Shell脚本( bourne和/或bash )中实现以下功能......使用类似于我的功能,在文件上使用RegEx(下面的内容示例)
文件内容:
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
它产生: RegEx模式(LD_PRELOAD =(\ S +)[\ n \ r] + ^ \ s * export \ s + LD_PRELOAD)在文件中不匹配:tempEnvVarsStd
答案 0 :(得分:0)
感谢@Cyrus。我最终使用了他的建议。在此处发布他的建议以获得更多可见性,其他人则寻找Shell Script MultiLine RegEx的类似问题...
variable=$(grep -Poz '^LD_PRELOAD=\K.*(?=(\n.*)*^export LD_PRELOAD$)' file)