簡體   English   中英

regex nagative assert 在 regextype 為 'sed' 的 Linux 'find' 命令中不起作用

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

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