使用 grep 检查文件中存储的变量是否未定义或为空

发布于 2025-01-10 08:34:29 字数 442 浏览 0 评论 0原文

考虑一个名为 .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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧瑾黎汐 2025-01-17 08:34:29

您的 ^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: ]] - 一个非空白字符。

Your ^env2=(?!\s*$).+ regex is a PCRE compliant regex, but you are using grep with the default POSIX BRE regex engine.

If you use a GNU grep, you can use the -P option to make grep treat the pattern as a PCRE regex:

grep -cPi '^env2=(?!\s*$).+' .env

Else, use a POSIX compliant pattern,`

grep -c -i '^env2=.*[^[:space:]]' .env

Here, the regex matches

  • ^ - start of string
  • env2= - literal text
  • .* - zero or more chars
  • [^[:space:]] - a non-whitespace char.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文