Shell-Script
只保留包含 x 或更少數字的行。文本文件
我發現了一個類似的問題:
但在這種情況下,我想檢查的不是總長度,而是行中的位數。例如,在這個輸入中:
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 位的行?
只保留具有 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
命令列印。
由於您標記了您的問題,因此在 perl 中執行此操作的一種方法是利用 perl返回替換字元數的
perl
事實;tr
所以例如(採取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