Bash grep正则表达式问题有两个不同的文件

时间:2018-03-19 15:44:56

标签: regex linux bash ubuntu grep

我有以下命令过滤仅由大写单词构成的文件中的3个字母单词 - 每行一个单词:

grep -E '^[A-Z]{3}$' test

当与包含10个单词的文件test一起使用时,该命令会返回正确的单词列表。当应用于包含超过30,000个单词的更大文件dico.txt时,该命令不会返回任何内容(仅显示新提示)。

我认为它可能是扩展程序或文件大小问题,我已尝试过:

  • cp test test.txt以匹配大文件*.txt扩展名
  • dico_small.txt
  • 选择1000行创建新文件dico.txt

......都没有成功。

1 个答案:

答案 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