【发布时间】:2020-02-24 05:25:12
【问题描述】:
我正在尝试使用前瞻搜索它在 pcregrep 或 grep 中不起作用的正则表达式
我想搜索片段
- 可能跨越多行,
- 以 PQXY 开头在一行的开头和
- 以 OFEJ 结束在行的末尾和
- 中间不包含 PQXY 或 OFEJ
一般我在 sublime text find 中使用以下内容并且效果很好
(?s)(^PQXY(?:(?!PQXY|OFEJ).)*OFEJ\n)
现在我想查找此类事件的计数,所以我尝试使用 grep 或 pcergrep,两者都不起作用。
pcregrep -c "(?s)(^PQXY(?:(?!PQXY|OFEJ).)*OFEJ\n)" file.txt
zsh: event not found: PQXY|OFEJ).)
和 grep
$ grep -c -zoP "(?s)(^PQXY(?:(?!PQXY|OFEJTRANS).)*OFEJTRANS\n)" CB_raw_testing_21_feb_CORRECTIONS_0002.txt
zsh: event not found: PQXY|OFEJTRANS).)
我该怎么做
根据@paxdiablo 和@anubha 回答。
主要错误是@paxdiablo 解决的单引号
$ pcregrep -c -M '(^PQXY(?:(?!PQXY|OFEJ).)*OFEJ\n)' file.txt
0
正则表达式的解决方案是在@anubha 的基础上添加(?s)。当然\n 也可以代替(\R|\z)
$ pcregrep -c -M '(?s)(^PQXY(?:(?!PQXY|OFEJ).)*OFEJ\n)' file.txt
11726
【问题讨论】:
-
如果文件不以换行符结尾,则仅供参考
\n将不起作用。