2017-06-06 20 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