使用 grep 检查存储在文件中的变量是否未定义或为空
Using grep to check if a variable stored in a file is not undefined or blank
考虑一个名为 .env
的文件,其中包含:
env1=foo
env2=bar
我使用带有正则表达式的 grep 来确认有一行用非空值定义 env2
,希望得到匹配项。
~$ grep -c -i '^env2=(?!\s*$).+' .env
0
Returns 0 个匹配...但是为什么呢?我在这里测试同样的东西时得到了匹配:https://regexr.com/6g7of
完整性检查:
~$ grep -c -i '^env2=bar' .env
1
如果我有疑问,请确认是否支持多行。
您的 ^env2=(?!\s*$).+
正则表达式是符合 PCRE 的正则表达式,但您使用的是 grep
和默认的 POSIX BRE 正则表达式引擎。
如果您使用 GNU grep,您可以使用 -P
选项使 grep
将模式视为 PCRE 正则表达式:
grep -cPi '^env2=(?!\s*$).+' .env
否则,使用 POSIX 兼容模式,`
grep -c -i '^env2=.*[^[:space:]]' .env
此处,正则表达式匹配
^
- 字符串开头
env2=
- 文字
.*
- 零个或多个字符
[^[:space:]]
- 一个 non-whitespace 字符。
考虑一个名为 .env
的文件,其中包含:
env1=foo
env2=bar
我使用带有正则表达式的 grep 来确认有一行用非空值定义 env2
,希望得到匹配项。
~$ grep -c -i '^env2=(?!\s*$).+' .env
0
Returns 0 个匹配...但是为什么呢?我在这里测试同样的东西时得到了匹配:https://regexr.com/6g7of
完整性检查:
~$ grep -c -i '^env2=bar' .env
1
如果我有疑问,请确认是否支持多行。
您的 ^env2=(?!\s*$).+
正则表达式是符合 PCRE 的正则表达式,但您使用的是 grep
和默认的 POSIX BRE 正则表达式引擎。
如果您使用 GNU grep,您可以使用 -P
选项使 grep
将模式视为 PCRE 正则表达式:
grep -cPi '^env2=(?!\s*$).+' .env
否则,使用 POSIX 兼容模式,`
grep -c -i '^env2=.*[^[:space:]]' .env
此处,正则表达式匹配
^
- 字符串开头env2=
- 文字.*
- 零个或多个字符[^[:space:]]
- 一个 non-whitespace 字符。