对于像Word-Count( wc )这样的数字程序,这是一个常见的输出:
$ wc MyLongFile.txt -l 985734902867 MyLongFile.txt
我想知道一些方法来过滤数字部分 ,以成为更多的可读性如下:
985.734.902.867 MyLongFile.txt
许多程序都有一些-h (对于human readable )选项,但是如果不是很长的话,可以用一个函数或别名来实现一些generics方法 ,或者至less可以input这些方法。
我想这个方法需要添加一个. 每3个数字连接组,但从右侧开始。
在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] 举报,一经查实,本站将立刻删除。