全ての数値データを一つずつ印刷

全ての数値データを一つずつ印刷

データ(英数字、ランダムな順序、レイアウトの特殊文字)を含むテキストファイルを取得します。これで、すべての数値データを1つずつ印刷する必要があります。

例:

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 ,[email protected]

出力

4332
123
3435
43
3543
3542
243
24342
24354
13

PS:問題は、この数に特定の開始または終了がないため、これを行う正規表現を考えることができないことです。

その役割スペース斑点セミコロン指す新しいチーム数字を区切るために使用できます。

ベストアンサー1

tr標準合計の使用grep:

tr -s ',;. ' '[\n*]' <file | grep -x '[[:digit:]]*'

これは、最初に可能なすべての区切り文字を改行文字に変更します(そして複数の連続した改行文字を1つに「圧縮」します)。最初のステップでは、出力が生成されます。

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(入力の前に結果があります*)。これは間違っているかもしれませんが、コードはもっと見る:-)

文字[:punct:]クラスにはコレクションが含まれています。

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

[:blank:]スペースとタブです。

おすすめ記事