unix配置文件的正则表达式

时间:2014-12-08 12:07:10

标签: regex grep

检查是否在已知配置文件中设置了变量。

我需要一个匹配var=1但不匹配# var=1的正则表达式。我的尝试不起作用。请问有人帮忙吗?

^(?<!#).*var.*#匹配var=1# var=1

编辑:以下正则表达式解决了正则表达式测试程序(regxlib.com)中的问题,但grep没有找到该行 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

2 个答案:

答案 0 :(得分:1)

这适用于您指定的内容。

/^[^#].+/gm

如果您需要&#34; =&#34;也是,使用这个

/^[^#].+=.+/gm

证明

http://www.regexr.com/3a1jp


在@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}}