【问题标题】:Cannot get full result while "grep file"“grep 文件”时无法获得完整结果
【发布时间】:2017-06-06 14:32:00
【问题描述】:

我想获取文件“1.txt”中包含“myString”的行,并将结果保存到“2.txt”。所以我把这些写在一个 bash 文件中:

#!/bin/sh
grep "myString" 1.txt > 2.txt

但我只得到了一半的“1.txt”,它在“2.txt”中以不完整的结果停止。使用 commond 而不是 bash 文件没有帮助。

我在 windows7 上使用 cygwin64 执行此操作。

是否有一些终止符可以阻止“grep”comnd,或者 windows7 上的大小限制,或者其他什么?

非常感谢。

【问题讨论】:

  • 添加一个示例输入文件并显示您在使用此脚本时获得的输出文件...另外,如果您想要一个 bash 脚本,请使用#!/bin/bash
  • @Sundeep 感谢您的建议。我把它改成了“bash”,但它没有帮助..这并没有发生在每个文件上,大多数时候它工作得很好。文件无法上传,因为它是公司文件:)可能是因为一些汉字?我会在 linux 上尝试一下,看看它是否可以工作。
  • 我应该先给出链接..stackoverflow.com/help/mcve 的想法是找到一种方法尽可能少地复制问题.. 自己创建示例文件,看看是否可以复制问题用你的真实用例看到......那么发现问题会更容易
  • @Sundeep 非常感谢。我在这里几乎是新人,对提问的方式不是很熟悉,这对我很有帮助。而且我发现了问题:因为有一些汉字,文件被识别为二​​进制文件....orz
  • 没问题,您自己尝试并找到了问题真是太棒了:)您可以将其添加为答案或删除问题...

标签: bash grep cygwin


【解决方案1】:

由于部分中文字符,该文件被识别为二​​进制文件。

用“-a”就好了。

不管有没有“-a”,它在 Linux 上也能正常工作。

所以windows7或cygwin也参与其中。

感谢@Sundeep 的帮助。

【讨论】:

  • 这不是 Cygwin 与 Linux 的问题。这是用于您的系统的文件编码和 LANG 的问题。如果 LANG 是 *.UTF-8 并且文件采用不同的编码,则 grep 可以匹配某些在 UTF-8 中无效的字节序列,并假定文件是二进制文件。使用file <nomefile> 识别编码。
  • 是的,该文件是“非 ISO 扩展 ASCII 文本,行很长,带有 LF、NEL 行终止符”。但是它在没有“-a”的Linux上运行良好,而在Windows上需要“-a”......这应该是操作系统的问题吗?
  • 我怀疑您使用的特定 Linux 和 Cygwin 之间的 locale 和/或 grep version 是否相同。
  • grep:Linux 上为 2.16,cygwin 上为 3.0。语言环境:Linux 上的 en_US.UTF-8,cygwin 上的 zh_CN.UTF-8。在汉字系统上出错有点奇怪......
  • 使用iconv将文件从当前编码转换为UTF8,问题就会消失。 Grep 前段时间更改了,它不再容忍检测为二进制的错误编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多