簡體   English   中英

Bash grep regex問題有兩個不同的文件

[英]Bash grep regex issue with two different files

我有以下命令,該命令僅從大寫單詞組成的文件中過濾3個字母的單詞-每行一個單詞:

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

與包含10個單詞的文件test一起使用時,該命令返回正確的單詞列表。 當應用於包含30,000個單詞的更大的文件dico.txt ,該命令將不返回任何內容(僅顯示新的提示)。

我以為可能是擴展名或文件大小問題,所以我嘗試了:

  • cp test test.txt以匹配大文件*.txt擴展名
  • 創建一個新文件dico_small.txtdico.txt選擇1000行

都沒有成功

您的大文件具有Windows行尾,即\\r\\n而不是Linux行尾\\n

\\r稱為回車grep將其視為普通字符。 當您編寫grep -E "a$" fileWithWindowsLineEndings grep將找不到任何內容,因為在以\\n結尾的Linux行(在grep中表示為$ )的前面總是有一個\\r而不是a

您可以通過刪除所有\\r字符將文件轉換為普通的linux文件。

tr -d '\r' < fileWithWindowsLineEndings > fileWithLinuxLineEndings
grep -E '...' fileWithLinuxLineEndings

或者,在不保存轉換結果的情況下即時轉換文件:

tr -d '\r' < fileWithWindowsLineEndings | grep -E '...'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM