Bash
一張一張列印所有數字數據
我收到了包含數據(字母數字、任何順序和佈局的特殊字元)的文本文件。現在我必須一一列印所有數字數據。
例子 :
this is txt *24354 filer3243gdt 4332 123 sfdg gtdf, gtdf;tr 3435; gfdsf .43er, ;43 3543; 4354w t535 tfgq 3542 fgdg, 243; wre; 24342 ; 24354 ;;;; 13 tgd dsgf ,3256653756456744rfdgf@gmail.com
輸出
4332 123 3435 43 3543 3542 243 24342 24354 13
PS:問題是這些數字沒有具體的開始或結束,所以我想不出 RegEx 可以做到這一點。
字元空格、逗號、分號、點和換行符可用於分隔數字。
使用標準
tr
和grep
:tr -s ',;. ' '[\n*]' <file | grep -x '[[:digit:]]*'
這首先將所有可能的定界字元更改為換行符(並將多個連續的換行符“擠壓”為一個)。第一步產生輸出
this is txt *24354 filer3243gdt 4332 123 sfdg gtdf gtdf tr 3435 gfdsf 43er 43 3543 4354w t535 tfgq 3542 fgdg 243 wre 24342 24354 13 tgd dsgf 3256653756456744rfdgf@gmail com
由此,
grep
用於提取僅包含數字的行。強制全行匹配的-x
選項,並且使用的模式匹配任意數量的數字。grep
該
grep
步驟導致4332 123 3435 43 3543 3542 243 24342 24354 13
這與您的預期輸出相同。
我的第一次嘗試看起來像
tr -s '[:punct:][:blank:]' '[\n*]' | grep -x '[[:digit:]]*'
它使用任何標點符號或空白字元作為分隔符。事實證明,這也獲得了第一個
24354
(在輸入中以 a 開頭*
)。這可能是錯誤的,但程式碼看起來更好:-)字元類
[:punct:]
包含集合!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
是空格和
[:blank:]
製表符。