【问题标题】:How can I make grep output all the matching lines?如何让 grep 输出所有匹配的行?
【发布时间】:2016-10-27 12:49:01
【问题描述】:

有人可以解释以下 grep 行为吗?

我有一个文本文件countries.list(每行都有一个电影名称和制作该电影的国家/地区)。 我想列出所有包含国家名称的行。

command : grep "UK" countries.list | wc -l 

结果:55

所以这意味着文件中有 55 行匹配,如果我将结果转储到文件中,显然该文件有 55 行。

如果我使用:

command grep -c "UK" countries.list 

结果:223523

这意味着有 223523 个匹配项

wc -l countries.list  :  1956994 countries.list

每部电影都换行。

如果我打开为什么 grep "UK" countries.list 不返回所有行。

很明显我做错了什么。你能帮我解释一下为什么会这样吗?

如果我只想打印匹配的国家/地区名称:

grep -o "UK" countries.list | wc -l

我得到 223766(与 223523 不同,但仍然比 55 多很多)

【问题讨论】:

  • grep -o "UK" 会更高,因为有些行可能不止一次包含文本“UK”,因此会输出为多行
  • 你的grep 是不是别名?所描述的行为肯定很奇怪
  • @WumpusQ.Wumbley 这是一个别名,但它不限制任何东西:type grepgrep is an alias for grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}
  • 您能否创建一个示例输入文件,其中包含几行包含 UK 和几行不包含它们以供我们测试?

标签: regex linux unix grep


【解决方案1】:

感谢您的回复我找到了答案。
grep 将其作为二进制文件而不是文本文件打开。

提示:$ grep "UK" countries.list 的最后一行: 二进制文件 countries.list 匹配

如果我这样做: $ strings countries.list | grep "UK" | wc -l 223523

【讨论】:

  • 您应该使用grep -a 选项(强制视为文本),因为strings 修改了您从文件中看到的相当多的内容。
猜你喜欢
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多