[英]Regex not matching in sed
我已經使用了多年的正則表達式,從來沒有遇到過這個問題。 在示例網站(如http://regexone.com/lesson/1 )上,我可以玩我正在嘗試做的事情,它匹配,但在使用sed
的unix shell中,它不匹配。 我在嘗試編寫logcheck跳過規則時發現了這一點。
$ echo 'Hello, world!' | sed '/^\w\w\wlo, wor.*$/d'
$
工作,但是
$ echo 'Hello, world!' | sed '/^\w{3}lo, wor.*$/d'
Hello, world!
沒有。 它似乎沒有看到{3}的3個alphanums。
我試圖通過減少來發現這一點
$ 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。
逃避大括號否則sed的默認行為是按字面順序匹配{} or ()
:
echo 'Hello, world!' | gsed '/^\w\{3\}lo, wor.*$/d'
否則你需要-r
標志來擴展正則表達式功能:
echo 'Hello, world!' | gsed -r '/^\w{3}lo, wor.*$/d'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.