为什么grep perl regex模式将UTF-8流/文件视为二进制文件?

为什么grep perl regex模式将UTF-8流/文件视为二进制文件?,grep,pcre,Grep,Pcre,我尝试使用perl正则表达式模式,因为我想匹配可能的跨模式,如: ... text text Name Surname text text ... 如果我想匹配“姓名” 因此,使用|grep-Pzo”(?s)Name.Name“对ASCII非常有效,但是如果我想在utf-8编码文件上尝试同样的方法,我会得到: Binary file (standard input) matches 当我用它喂grep时,没有结果。我还尝试了使用常规文件grep-Pzo”(?s)Name.姓氏“utf-8.t

我尝试使用perl正则表达式模式,因为我想匹配可能的跨模式,如:

...
text text Name
Surname text text
...
如果我想匹配“姓名”

因此,使用
|grep-Pzo”(?s)Name.Name“
对ASCII非常有效,但是如果我想在utf-8编码文件上尝试同样的方法,我会得到:

Binary file (standard input) matches
当我用它喂grep时,没有结果。我还尝试了使用常规文件
grep-Pzo”(?s)Name.姓氏“utf-8.txt
,但都是一样的

不带perl regex开关的OTOH grep在同一流上按预期工作


那么有什么开关可以解决这个问题吗?

您可以使用
-a
-binary files=text
选项告诉
grep
将其视为文本文件:

... | grep -aPzo "(?s)Name.Surname"

grep -aPzo "(?s)Name.Surname" utf-8.txt