[英]regex nagative assert does not work in Linux 'find' command with regextype being 'sed'
假設我想匹配第二個數字不等於 0 的文件。
例如
./update110000.pt -> match
./update170000.pt -> match
./update100000.pt -> not match
所以我寫了這個
.*update[0-9](?!0)[0-9]{5}.pt
它通過了https://www.regexpal.com/上的正則表達式檢查
但是當我像下面這樣在 Linux 上使用 find 命令時,它不再起作用了
find . -regextype sed -regex '.*update[0-9](?!0)[0-9]{5}.pt'
我也嘗試添加反斜杠,但也沒有用
find . -regextype sed -regex '.*update[0-9]\(?!0\)[0-9]{5}.pt'
我知道在這種情況下我可以簡單地使用
find . -regextype sed -regex '.*update[0-9][1-9][0-9]{4}.pt'
這實際上有效。 但我仍然想知道如何在 find 命令中正確使用(?!x)
語法。
謝謝!
如果您將正則表達式風格定義為sed
,它實際上是POSIX BRE不支持環視(您的模式中有一個負前瞻(?!0)
)並且還遵循一些特定的轉義規則:
find . -regextype sed -regex '\(.*/\)\{0,1\}update[0-9][1-9][0-9]\{4\}\.pt'
詳情:
\(.*/\)\{0,1\}
- 任意文本的可選序列,然后/
update
- 一個固定的字符串[0-9]
- 一個數字[1-9]
- 一個非零數字(這是代替前瞻)[0-9]\{4\}
- 四位數字**(注意4
這里,不是5
)\.pt
- 一個.pt
字符串。如果您使用POSIX ERE ,您可以避免過度轉義:
find . -regextype posix-extended -regex '(.*/)?update[0-9][1-9][0-9]{4}\.pt'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.