Bash

一張一張列印所有數字數據

  • April 14, 2021

我收到了包含數據(字母數字、任何順序和佈局的特殊字元)的文本文件。現在我必須一一列印所有數字數據。

例子 :

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 可以做到這一點。

字元空格逗號分號換行符可用於分隔數字。

使用標準trgrep

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:]製表符。

引用自:https://unix.stackexchange.com/questions/644896