只保留包含 x 或更少數字的行。 TXT文件

只保留包含 x 或更少數字的行。 TXT文件

我發現了一個類似的問題:

但在這種情況下,我想檢查的不是總長度,而是行中的位數。例如,從此輸入:

cdc85e24-b9e9-8802-080a-b84479e1ae82  
ekodeveloper0  
1795475824.1129747.1472396049615.ref  
1795475824.1129747.1472396049615  
967175540.1194446.1472407271491  
wangxiuyan552  
jveazey  
xoloki  
whelee  
matthauck  
patel3.anirudh  
mischa.salle  

如何刪除所有超過N位數字的行?

答案1

既然您標記了您的問題perl,那麼在 perl 中執行此操作的一種方法是利用 perltr返回替換字元數的計數這一事實;例如(採取N = 13)你可以這樣做

perl -ne 'print unless tr/[0-9]/[0-9]/ > 13' file
ekodeveloper0
wangxiuyan552
jveazey
xoloki
whelee
matthauck
patel3.anirudh
mischa.salle

一種可能更傳統的方法是在標量上下文中評估正規表示式匹配以獲得計數

perl -ne '$c = () = /\d/g; print unless $c > 13' file

請參閱範例Perl 是否有計算字串中符合項目數量的捷徑?

答案2

只保留具有 X 或的行會更容易更多的數字。下面是 X 為 13 的範例:

sed -n 's/[0-9]/&/13p' input.txt > output.txt

但是,您可以修改它以執行相反的操作。這是一個僅保留具有以下內容的行的命令少於 13數字:

sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt

說明 - 僅列印包含 13 個以上數字的行

sed -n 's/[0-9]/&/13p' input.txt > output.txt

替換文字中的符號&表示「所有符合的內容」。

命令上的數字標誌s(在該/find/replace/部分之後)意味著僅替換搜尋模式的該實例。

p命令上的標誌表示s「如果進行了替換則進行列印」。

-n當然,這個開關是為了抑制 Sed 的預設「列印」操作。

說明 - 僅列印數字 <13 的行

sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt

開關-e為“執行”;它只是傳遞一個命令。我們在這裡需要它,因為我們要經過不只一個。

如果最後一個命令執行了替換,則該t命令將跳過其餘命令。s

命令p列印。

相關內容