Home > Back-end >  Using grep to check if a variable stored in a file is not undefined or blank
Using grep to check if a variable stored in a file is not undefined or blank

Time:02-25

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.

CodePudding user response:

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.
  • Related