我需要一些解决方案来替换一些字符串。 我有一个"file",其内容如下:
23674, ICMP ping, OK, 1, 2016-08-25 17:11:02
23686, Ping, OK, 1, 2016-08-25 16:05:04
23689, SSH Service, OK, 1, 2016-08-25 16:05:49
23693, System Free Space, OK, 97.9560, 2016-08-25 16:06:49
23713, System Free Space, OK, 88.0078, 2016-09-20 18:02:22
23745, C:\ Free, OK, 63.2227, 2016-09-21 10:57:03
我使用此代码来获取“免费”值,如下所示:
grep Free file.txt |grep OK | cut -d K -f 2 |cut -d , -f 2 |cut -d . -f 1
然后我得到了这个结果:
97
88
63
我需要使用以下代码将“%”插入到结果中:
grep Free rs.txt |grep OK | cut -d K -f 2 |cut -d , -f 2 |cut -d . -f 1 |sed 's/$/%/g'
结果如下:
97%
88%
63%
我的问题是,如何用新结果“97%”等替换文件上的值,例如“97.9560”。
请给我一个建议。
谢谢
最佳答案
替换文件中的值:
sed -E -i.bak 's/(Free.*OK,[^.]*)[.][^,]*/\1%/' file.txt
示例:
$ sed -E -i.bak 's/(Free.*OK,[^.]*)[.][^,]*/\1%/' file.txt
$ cat file.txt
23674, ICMP ping, OK, 1, 2016-08-25 17:11:02
23686, Ping, OK, 1, 2016-08-25 16:05:04
23689, SSH Service, OK, 1, 2016-08-25 16:05:49
23693, System Free Space, OK, 97%, 2016-08-25 16:06:49
23713, System Free Space, OK, 88%, 2016-09-20 18:02:22
23745, C:\ Free, OK, 63%, 2016-09-21 10:57:03
它是如何工作的
-E
这告诉 sed 使用扩展正则表达式。这减少了我们需要的反斜杠的数量。
-i.bak
这告诉您就地更改文件,并留下备份文件。
s/(免费。*好的,[^.]*)[.][^,]*/\1%/
这告诉 sed 进行您需要的替换。在这种情况下,sed 查找与正则表达式
(Free.*OK,[^.]*)[.][^,]*
匹配的文本。这匹配Free
后跟OK,
后跟除句点之外的任何内容,后跟句点,后跟除逗号之外的任何内容。括号会导致从Free
到句点之前的最后一个字符的所有内容都保存在组 1 中。匹配的文本被替换为
\1%
,这意味着属于组1的文本,\1
,后跟百分号,%
.
关于bash - grep 特定字符串并用 sed 替换该文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39607425/