使用 sed 替换部分字符串
replacing part of string using 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),也文件的其余部分应保持不变。
以下适用于 Linux 和 OSX/BSD 系统:
sed -E 's/(^| )([0-9]).([0-9]{3})g( |$)/m/g' infile > outfile
它做出某些假设:
- 应替换
d.dddg
形式的任何字段(其中 d
是十进制数字)(甚至可能在一行中多次出现 - 删除最后一个之后的 g
/
每行最多替换 一个)
- 字段是 space 分隔的
相比之下,如果需要执行实际计算,awk
是你的朋友。
我有这个超过 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),也文件的其余部分应保持不变。
以下适用于 Linux 和 OSX/BSD 系统:
sed -E 's/(^| )([0-9]).([0-9]{3})g( |$)/m/g' infile > outfile
它做出某些假设:
- 应替换
d.dddg
形式的任何字段(其中d
是十进制数字)(甚至可能在一行中多次出现 - 删除最后一个之后的g
/
每行最多替换 一个) - 字段是 space 分隔的
相比之下,如果需要执行实际计算,awk
是你的朋友。