使用sed替换字符串的一部分

列夫

我有这个1,000,000+行的大文件,其中包含一些内存数据。对于某种用途,我需要将g转换为mb,例如:

DateAndTime#15/03/15 07:57:07
**********************
top - 07:57:27 up 2 days, 15:28, 18 users,  load average: 4.65, 3.15, 2.11
Tasks: 774 total,   2 running, 771 sleeping,   0 stopped,   1 zombie
%Cpu(s): 12.8 us,  2.5 sy,  0.0 ni, 83.5 id,  1.2 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:  16327128 total, 16119192 used,   207936 free,   177868 buffers
KiB Swap: 36060156 total,    78552 used, 35981604 free.  6570548 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 26636 fpd       20   0 9987.4m 6.307g  47728 S   0.0 40.5 192:07.10 AppExe
 29019 fpd       20   0 1752832 785848  45652 S  77.0  4.8  17:32.74 python

到:

 26636 fpd       20   0 9987.4m 6307m  47728 S   0.0 40.5 192:07.10 AppExe

问题在于该文件构建在一个不方便使用的结构中,需要首先找到x.xxxG,然后才将其替换,因此要花费大量时间(通过readline),其余文件也应保留相同。

mklement0

以下在Linux和OSX / BSD系统上有效:

sed -E 's/(^| )([0-9]).([0-9]{3})g( |$)/\1\2\3m\4/g' infile > outfile 

它做出了一些假设:

  • 格式的任何字段d.dddg(其中d有一个十进制数字)都应替换(单行中甚至可能多次出现-删除g最后一个之后的内容/每行最多替换一个
  • 字段以空格分隔

相比之下,如果需要执行实际计算,那么awk您是您的朋友。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章