我有以下文本文件:
a
a
我正在尝试使用以下命令来匹配以a
开头的行:pcregrep -M '^a'
。它仅匹配第一个a
,而不匹配第二个。有人知道为什么吗?我使用pcregrep
是因为这是一个简单的问题,稍后我将扩展到更复杂的情况。
谢谢!
更新
原因是我使用的是Mac OS,其中每个换行符都是回车符。因此,pcregrep将文件内容(a \ ra)解释为一行,而我的正则表达式仅返回该行的第一个a
,因为这就是我在表达式中指定的全部内容。使用pcregrep的解决方案是指定换行符类型。 “换行符类型”是指Regex引擎将其解释为指定行尾的字符。因此,如果在这种情况下我们指定换行符类型为回车(\ r),则pcregrep会将我文件的内容解释为两行,并且将匹配并返回两者。
我的Regex的固定版本是pcregrep -M -N CR '^a'
,其中-N CR
的意思是“换行符是回车”。
答案 0 :(得分:1)
自从您在MasOS中创建了文本文件以来,行尾用CR(回车)符号(\r
,\x0D
(ASCII表中的索引为13的字符))表示。
默认情况下,pcregrep
和其他类似工具将\n
(LF(换行符)符号)作为换行符。
您应该通过pcregrep
选项告诉-N
将CR用作换行符:
pcregrep -o -N CR '^a' file
^^^^^