如果您正在處理日誌、資料匯出或任何包含數字的文字文件,了解如何快速提取這些數字可以節省大量時間。當然,grep 是這裡的首選工具,但如何讓它只提取數字部分並不總是顯而易見的。有時,這個命令感覺有點棘手,並且在某些設定下,它的行為會有所不同。只要稍加調整,您就可以設定正規表示式模式來擷取整數、小數甚至負值。如果您想在分析數據時不移除所有不必要的數據,這很有意義。

一旦你掌握了竅門,你複製貼上的次數就會減少,處理速度也會有所提升。這裡有一個基於常見痛點的指南,希望能讓你輕鬆提取這些數字。當然,因為 Linux 會讓一切乍看之下有點難。

如何在 Linux 中使用 Grep 從文字檔案中提取數字

了解 grep 可以為您做什麼

這個grep指令主要講的是 Linux 中的模式匹配。如果你不常使用它,它的核心思想是:告訴 grep 要找什麼,它就會找到。提取數字時,你希望它匹配數字,如果需要,也可以匹配小數或負數。基本模式如下圖所示:

grep -o '[0-9]\+' data.txt

分解如下:

  • -o – 告訴 grep 只顯示符合的部分,而不是整行。這樣,你就能得到一個只有數字的乾淨清單。
  • [0-9] – 符合 0-9 之間的任意數字。
  • \+ – 表示前面的模式“一個或多個”,因此它可以捕獲整個數字而不僅僅是單個數字。

現在,如果你的文字檔案包含浮點數或負數,你需要稍微調整一下正規表示式。不過,這個命令是我的出發點,大多數情況下,它都能處理整數的情況。

運行命令並預期結果

開啟你的終端機 — — 在 Ubuntu 或大多數 Linux 發行版上,Ctrl + Alt + T效果很好 — — 然後執行以下指令:

grep -o '[0-9]\+' data.txt

如果您的檔案不在目前目錄中,請確保包含完整路徑,例如/home/user/documents/data.txt。在某些設定中,權限可能會讓您陷入困境,因此如果您需要使用運行,請不要感到驚訝sudo

運作時,會逐行列印出一串數字。即使文字中混雜了數字、單字或標點符號,grep 也只會提取數字部分。這聽起來很奇怪,但有時這正是快速分析所需要的。

處理浮點數和負數

如果需要小數或負數,情況會更複雜一些。常見的模式是:

grep -o '-\?[0-9]*\.?[0-9]\+' data.txt

這個模式在匹配負數和小數方面表現不錯,但要注意:正規表示式很快就會變得棘手。在某些行上,它可能會過於謹慎或遺漏一些邊緣情況,所以請先用你的數據進行測試。

實際上,複數的正規表示式就像一個兔子洞——但如果你了解每個部分的作用,你就可以調整它來滿足你的需求。

額外提示和常見陷阱

  • 用單引號括起你的模式,特別是當你的終端使用+或 之類的字元時?。否則,你的 shell 可能會以不同的方式解釋它們。
  • 如果您正在處理大型文件,請考慮將輸出透過管道傳輸到less以便於閱讀:
grep -o '[0-9]\+' data.txt | less
  • 如果權限阻止存取該文件,快速執行chmodgrep 命令或以 root 身分執行 grep 可能會有所幫助。但要小心——在不清楚具體原因的情況下,不要以 sudo 身份運行命令。
  • 包起來

    使用 grep 提取數字並非高深莫測,但也有其特殊之處。有時,你運行命令,期望得到一個完美的列表,但卻得到了奇怪的結果或遺漏了數字——尤其是在處理小數或負數時——所以需要做好反复嘗試的準備。不過,如果你想要解析日誌、提取數據,或者只是快速了解一個雜亂的文本文件的內容,這仍然是一項非常實用的技能。

    常見問題

    我可以在 Windows 上使用 grep 嗎?

    是的,完全正確。 Windows 原生沒有 grep,但 Cygwin 或 Windows Subsystem for Linux (WSL) 等工具非常適合。或者,原生findstr指令也有類似的功能,但對正規表示式的支援不夠強大。

    如果檔案很大,而且 grep 很慢怎麼辦?

    對於大文件,grep 的速度可能會稍微慢一些。在這種情況下,限制結果數量會有所-m幫助。或者,如果您之後需要過濾或處理,可以將結果直接傳輸到其他工具。

    我如何將數字保存到單獨的文件中?

    簡單的方法是重定向輸出:

    grep -o '[0-9]\+' data.txt > numbers_only.txt

    這將建立一個僅包含提取的數字的新文件,非常適合匯入電子表格或進一步處理。

    概括

    • 用於grep -o '[0-9]\\+' filename整數。
    • 如果需要小數或負數,請調整正規表示式。
    • 在處理大文件之前最好先在小塊上進行測試。

    包起來

    總而言之,一旦你了解它的模式,它就不會太複雜。在某些情況下,它可能會表現得很奇怪,或者錯過一些特殊情況,但大多數情況下,它都能正常工作。希望這能為那些在混合文本和數字之間掙扎的人節省幾個小時。只要繼續測試,你就能掌握它。