使用 grep 检查文件中存储的变量是否未定义或为空
考虑一个名为 .env
的文件,其中包含:
env1=foo
env2=bar
我使用 grep 和正则表达式来确认有一行使用非空值定义 env2
,期望获得匹配。
~$ grep -c -i '^env2=(?!\s*$).+' .env
0
返回 0 个匹配项...但为什么呢?当我在这里测试同样的东西时,我得到了匹配: https://regexr.com/6g7of
健全性检查:
~$ grep -c -i '^env2=bar' .env
1
确认支持多行以防我有疑问。
Consider a file called .env
containing:
env1=foo
env2=bar
I use grep with a regular expression to confirm there's a line defining env2
with a non-blank value, expecting to get a match.
~$ grep -c -i '^env2=(?!\s*$).+' .env
0
Returns 0 matches... but why? I got a match when I tested the same thing here: https://regexr.com/6g7of
Sanity check:
~$ grep -c -i '^env2=bar' .env
1
To confirm multiline is supported in case I had a doubt.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的
^env2=(?!\s*$).+
正则表达式是符合 PCRE 的正则表达式,但您将grep
与默认的 POSIX BRE 正则表达式引擎一起使用。如果您使用 GNU grep,则可以使用
-P
选项使grep
将模式视为 PCRE 正则表达式:否则,请使用 POSIX 兼容模式,`
这里,正则表达式匹配
^
- 字符串开头env2=
- 文字.*
- 零个或多个字符[^[:space: ]]
- 一个非空白字符。Your
^env2=(?!\s*$).+
regex is a PCRE compliant regex, but you are usinggrep
with the default POSIX BRE regex engine.If you use a GNU grep, you can use the
-P
option to makegrep
treat the pattern as a PCRE regex:Else, use a POSIX compliant pattern,`
Here, the regex matches
^
- start of stringenv2=
- literal text.*
- zero or more chars[^[:space:]]
- a non-whitespace char.