2017-06-06 183 views
0

我想要获取文件“1.txt”中包含“myString”的行,并将结果保存为“2.txt”。所以,我在bash文件写这些:“grep文件”时无法获得完整结果

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

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

我正在用windows7上的cygwin64做到这一点。

是否有一些终止器可以阻止“grep”问题,或Windows7上的大小限制或其他?

非常感谢。

+1

添加一个示例输入文件,并显示您使用此脚本时得到的输出文件...另外,如果您想要bash脚本,请使用'#!/ bin/bash' – Sundeep

+0

@Sundeep感谢您的建议。我把它改成了“bash”,但它没有帮助..这并没有发生在每个文件上,大部分时间它都运行得很好。该文件无法上传,因为它是一个公司的文件:)也许是因为一些中文字符?我会尝试在Linux上看看它是否会工作。 – dif

+0

我应该给自己之前的链接.. https://stackoverflow.com/help/mcve想法是找到一种方法来尽可能最小化复制问题..自己创建示例文件,看看你是否可以复制用您的真实用例看到的问题...然后更容易发现问题 – Sundeep

回答

1

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

用“-a”就可以。

此外它在Linux上运行得很好,有或没有“-a”。

所以windows7或cygwin也参与其中。

感谢@Sundeep的帮助。

+0

这不是Cygwin与Linux的问题。这是文件使用和LANG用于你的系统的问题。如果LANG是'* .UTF-8',并且文件使用不同的编码,则grep可以匹配某些在UTF-8中无效的字节序列,并假定该文件是二进制文件。使用'file '来识别编码。 – matzeri

+0

是的,文件是“非ISO扩展ASCII文本,非常长的行,LF,NEL行结束符”。但是,它在Linux上没有“-a”的情况下工作得很好,而在Windows上需要“-a”......应该是操作系统的问题吗? – dif

+0

我怀疑'locale'和/或'grep'版本在您使用的特定Linux和Cygwin之间是相同的。 – matzeri