我已经使用了多年的正则表达式,并且从来没有遇到过这个问题。在示例网站上(例如http://regexone.com/lesson/1),我可以在其中尝试执行相同的操作,但在使用sed
的unix shell中,它不匹配。我试图编写logcheck跳过规则时发现了这一点。正则表达式在sed中不匹配
$ echo 'Hello, world!' | sed '/^\w\w\wlo, wor.*$/d'
$
作品,但
$ echo 'Hello, world!' | sed '/^\w{3}lo, wor.*$/d'
Hello, world!
没有。它看起来没有看到3个带有{3}的字母。
我发现了这一点,试图做
$ echo "Jul 15 11:31:08 gateway-laptop dbus[3076]: [system] Successfully activated service 'org.freedesktop.PackageKit'"|sed "/^\w{3} [ :0-9]{11} [._[:alnum:]-]+ dbus\[[0-9]+\]: \[system\].*/d"
Jul 15 11:31:08 gateway-laptop dbus[3076]: [system] Successfully activated service 'org.freedesktop.PackageKit'
其中我本来以为应该匹配减少。降低这种复杂性,这不符合
$ echo "Jul 15 11:31:08 gateway-laptop dbus[3076]: [system] Successfully activated service 'org.freedesktop.PackageKit'"|sed "/^\w{3}.*"/d
Jul 15 11:31:08 gateway-laptop dbus[3076]: [system] Successfully activated service 'org.freedesktop.PackageKit'
它看起来像它的行为^ \ w {3}应该与行的第一个3个字母数字字符,则*应行的其余部分匹配EOL。
更新的标签; 'bash'与此无关。 – chepner