我有以下命令过滤仅由大写单词构成的文件中的3个字母单词 - 每行一个单词:
grep -E '^[A-Z]{3}$' test
当与包含10个单词的文件test
一起使用时,该命令会返回正确的单词列表。当应用于包含超过30,000个单词的更大文件dico.txt
时,该命令不会返回任何内容(仅显示新提示)。
我认为它可能是扩展程序或文件大小问题,我已尝试过:
cp test test.txt
以匹配大文件*.txt
扩展名dico_small.txt
dico.txt
......都没有成功。
答案 0 :(得分:3)
你的大文件有windows行结尾,即\r\n
而不是linux行结尾\n
。
\r
被称为回车,被grep
视为普通字符。当你写grep -E "a$" fileWithWindowsLineEndings
时,grep
找不到任何东西,因为在结束\n
的linux行前面(在grep中表示为$
)总有一个{ {1}}而不是\r
。
您可以删除所有a
字符,将文件转换为普通的linux文件。
\r
或者,在不保存转换结果的情况下即时转换文件:
tr -d '\r' < fileWithWindowsLineEndings > fileWithLinuxLineEndings
grep -E '...' fileWithLinuxLineEndings