检查是否在已知配置文件中设置了变量。
我需要一个匹配var=1
但不匹配# var=1
的正则表达式。我的尝试不起作用。请问有人帮忙吗?
^(?<!#).*var.*
#匹配var=1
和# var=1
grep "^[^#].+(?<=var.*)" ~/testfile.conf
testfile.conf
#var=1
export var=2
export foo=2
有人知道为什么grep中的这个不起作用吗?
EDIT2: 以下表达似乎解决了我的问题。
grep "^[^#]*var" ~/testfile.conf
res
sed -n "/^[^#]*var/p" ~/testfile.conf
答案 0 :(得分:1)
这适用于您指定的内容。
/^[^#].+/gm
如果您需要&#34; =&#34;也是,使用这个
/^[^#].+=.+/gm
证明
在@mtm之后编辑,建议避免使用纯空格,所以
/^[^#]*[^#\s]+\s*=\s*[^#\s]+/gm
is another good choice。请记住,截断声明,foo = #123
在配置文件中也无效...
但如果您将grep
与默认正则表达式一起使用,则+
不是运算符(必须进行转义),并且通用空格需要由{{1}表示}}。一些使用完整正则表达式的方法,
[:space:]
更简单,更准确的是检查配置文件的真实语法,可能grep "^[^#]*[^#[:space:]]\+[[:space:]]*=[[:space:]]*[^#[:space:]]\+" config
grep -E "^[^#]*[^#[:space:]]+[[:space:]]*=[[:space:]]*[^#[:space:]]+" config
grep -P "^[^#]*[^#\s]+\s*=\s*[^#\s]+" config
无效,所以
a@b,1=1
将是简单而且是最佳选择。
答案 1 :(得分:0)
在Perl兼容正则表达式中,允许在属性名称之前和之间使用空格,然后同时捕获名称和值。
/^\s*([\w]+)\s*=\s*(.+)/
如果您已添加使用grep
,则如果grep -P
支持grep
,则可以使用grep "^ *[_[:alnum:]]\+ *= *.\+" config
运行PCRE
基本的POSIX正则表达式(将在大多数grep实现中运行)相同:
{{1}}