【发布时间】:2018-04-07 23:33:57
【问题描述】:
我希望在使用 egrep 的 UNIX 终端中匹配并返回纯文本 UTF-8 编码文件中每一行的第一个字符。我推测以下带有简单正则表达式的 egrep 命令会产生所需的结果:
egrep -o "^." FILE.txt
但是,输出似乎匹配并返回文件中的每个字符;也就是说,它的行为就像命令是:
egrep -o "." FILE.txt
使用以下命令会产生类似的结果,
egrep -o "^[a-z]" FILE.txt
也就是说,结果就像提供了正则表达式“[a-z]”(即,匹配 a-z 范围内的每个小写 ASCII 字符)。
如预期的那样,仅提供一个特定字母数字字符的命令似乎返回以特定字符开头的每一行,例如,
egrep -o "^1" FILE.txt
或 egrep -o "^T" 文件.txt
分别返回所有以“1”或“T”开头的行。
我已尝试将整个文件粘贴到 RegEx 测试器中,例如 https://regexr.com/,并使用表达式“^”。确实表现如预期,所以我认为我的文件没有任何可能干扰的空格字符。
egrep 的行首元字符“^”是否存在其他可能导致此问题的行为?
【问题讨论】:
-
这是哪个平台/grep?它在 GNU/Linux 上按预期工作。
-
这是在 OS X 10.12.6 上。
-
好的,我可以在 BSD grep 上重现这个。绝对出乎意料的行为,必须仔细观察。顺便说一句,要打印每行的第一个字符,您只需使用
cut -c1 file而不是 grep。 -
你能告诉我你的
grep --version的输出是什么吗? -
是:egrep (BSD grep) 2.5.1-FreeBSD