我有以下文本文件:
a
a我试图使用以下命令匹配以a开头的行:pcregrep -M '^a'。它只匹配第一个a,而不匹配第二个。有人知道为什么吗?我使用pcregrep是因为这是一个简单的问题,稍后我将扩展到更复杂的场景。
谢谢!
更新
原因是我使用的是Mac,其中每个换行符都是回车。因此,pcregrep将文件内容(即\ra)解释为一行,而我的regex只返回该行中的第一个a,因为这是表达式中指定的全部内容。使用pcregrep的解决方案是指定换行符类型。“'Newline类型”是指Regex引擎将其解释为指定行尾的字符。因此,如果我们在本例中指定换行符类型为回车(\r),pcregrep将将我的文件的内容解释为两行,并匹配并返回这两行。
我的Regex的固定版本是pcregrep -M -N CR '^a',其中-N CR的意思是“换行符类型是回车”。
发布于 2019-06-08 20:57:39
由于您在MasOS中创建了一个文本文件,所以行尾用CR (回车)符号(\r、\x0D、索引13的字符在ASCII表中表示)表示。
默认情况下,pcregrep和其他类似的工具都将\n (一个LF (行提要)符号)作为换行字符。
您应该告诉pcregrep使用CR作为换行字符,使用-N选项:
pcregrep -o -N CR '^a' file
^^^^^https://stackoverflow.com/questions/56450832
复制相似问题