我發現了一個類似的問題:
但在這種情況下,我想檢查的不是總長度,而是行中的位數。例如,從此輸入:
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
答案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
列印。