[英]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.txt
從dico.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.