微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux shell:为数字输出添加点,使其更具可读性

对于像Word-Count( wc )这样的数字程序,这是一个常见的输出

$ wc MyLongFile.txt -l 985734902867 MyLongFile.txt

我想知道一些方法过滤数字部分 ,以成为更多的可读性如下:

985.734.902.867 MyLongFile.txt

许多程序都有一些-h (对于human readable )选项,但是如果不是很长的话,可以用一个函数或别名来实现一些generics方法 ,或者至less可以input这些方法

我想这个方法需要添加一个. 每3个数字连接组,但从右侧开始。

在Windows中计算PHP中的文件行数

在linux中使用sedreplacestring后得到一个额外的数字

是否有可能使VIM显示行数?

Bash数量限制?

删除报价周围的数字

不改变非数字部分的方法是首选。 如果可能的话,考虑在数字左侧可能有字母(或任何其他字符),如下所示:

ls -la -rw-rw-r-- 1 luis luis 93342519 ene 1 00:22 tmp.txt

我现在发现的最好的就是这个sed命令:

$ wc MyLongFile.txt -l | sed 's/(^|[^0-9.])([0-9]+)([0-9]{3})/12.3/g' 985734902,867 MyLongFile.txt

…但是,正如你所看到的,它只能工作到数千人,而我对sed经验不是很多。

非常感谢你

如何从任意基地转换任意大整数到不同的基地?

你可以通过使用基于正向lookahead的正则表达式的Perl来做到这一点。

perl -pe 's/(d{1,3})(?=(?:d{3}){1,5}b)/1,/g' file

要么

wc MyLongFile.txt -l | perl -pe 's/(d{1,/g'

例:

$ cat file 7985734902867 MyLongFile.txt 734902867 MyLongFile1.txt $ perl -pe 's/(d{1,/g' file 7,985,734,902,867 MyLongFile.txt 734,867 MyLongFile1.txt

这就像一个正则表达式乘法。 让我解释它是如何工作的。 以这个7985734902867 MyLongFile.txt为例。

d{1,3}匹配一个数字或两个或三个。 如果它被包裹在一个捕获组中,相应的数字不仅被匹配,而且被捕获。

首先,正则表达式引擎将匹配第一个数字7并检查数字7是否跟随着3的倍数的数字。因此数字7之后是12数字,然后是字边界。 12是3的倍数。因此它捕获相应的数字7 。 在这里,单词边界b是一个必须在单词字符和非单词字符之间匹配的单词。

接下来检查下一个数字9,后面跟着11个数字。 所以它不会只捕获数字9 。 因为我们定义了d{1,3} ,所以它需要两位数字98并检查以下数字。 因为它后面跟着10个不是3的倍数的数字,所以它也捕获下一个数字,也就是5 ,然后检查下面的数字。 现在它后面跟着一个9位数字。 所以相应的三位数字985将被捕获​​。 同样,它的数字正好是三位数字和一个字的边界。

用1替换所有匹配的字符,即组索引1内的字符加逗号会给你所需的输出

(?=(?:d{3}){1,10}b您可以增加大数字的正向预测范围内的范围数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐