簡體   English   中英

正則表達式在sed中不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM