【发布时间】:2018-03-19 15:44:56
【问题描述】:
我有以下命令从仅由大写单词组成的文件中过滤 3 个字母的单词 - 每行一个单词:
grep -E '^[A-Z]{3}$' test
当与包含 10 个单词的文件 test 一起使用时,该命令会返回正确的单词列表。当应用于包含超过 30,000 个单词的更大文件 dico.txt 时,该命令不返回任何内容(仅显示新提示)。
我认为这可能是扩展名或文件大小问题,我已经尝试过:
-
cp test test.txt匹配大文件*.txt扩展名 - 创建一个新文件
dico_small.txt从dico.txt中选择1000行
...都没有成功。
【问题讨论】:
-
您确定大文件包含任何 3 个字母的大写单词吗?
-
确实如此!我还尝试了其他数字(5、6、7 等),但行为相同......
-
会不会是大文件有 windows 行尾
\r\n而不是 linux 行尾\n?在这种情况下,\n之前的\r将阻止grep匹配任何内容,因为您的正则表达式要求在\n之前直接输入一个字母。file youLargeFile的输出是什么? -
输出:
dico.txt: ASCII text, with CRLF line terminators -
@wiltomap 跟我想的一样。
CRLF表示回车\r,换行\n。有关详细信息,请参阅my answer。
标签: regex linux bash ubuntu grep