只保留包含 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打印。

相关内容