Sed模式排除值

时间:2016-01-24 19:14:32

标签: sed temperature

我的文件有温度值:

$ cat temperature.txt
[1450746005000,18.00],[1450746365000,18.00],[1450746725000,17.94],[1450747085000,17.94],[1450747445000,17.94],[1450747805000,17.94],[1450748165000,17.94],[1450748525000,17.88],[1450748885000,17.88],[1450749245000,17.88],[1450749606000,17.88],

有时我的电台会保存错误的值,例如:(第二个值)

[1453634645000,19.06],[1453635364000,[1453658405000,19.13],

我想只删除错误的值并覆盖此文件。 在这种情况下它[1453635364000,

我发现了如何搜索" good"值。但我不知道如何删除错误的内容。

sed 's/\[[^]]*,?\],*//g' temperature.txt > temperature.txt.proper
rm temperature.txt && mv temperature.txt.proper temperature.txt

2 个答案:

答案 0 :(得分:2)

试试这个:

sed 's/[[0-9]\+,\[/[/g;s/[[0-9]\+,$//g' file

要“就地”修改文件,请添加sed的选项-i

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -r ':a;s/\[[0-9]+,($|\[)/\1/;ta' file

这会删除数字后跟,后跟[。当这种模式中的两个或多个相邻时,全局替换是不够的,模式匹配必须再次开始,因此循环。