使用 sed 或 awk、grep 删除字符串

Remove string using sed or awk, grep

我正在尝试查找并删除如下字符串:

[1126604244001,85.00],  [1122204245002,85.00], [1221104246003,85.00],
[1222204247004,85.00], [1823304248005,85.00], [1424404249006,85.00],

85.00 = 常量。我的意思是 [xxxxxxxxxxxxx,85.00],

在记事本++中很简单:

find: "[^........].............,85.00]" and replace:""

我喜欢使用 awk 或 sed 自动删除字符串,而无需将其导入记事本++。

好的,我有文件

temp.txt

[1126604244001,17.00], [1126604244001,17.00], [1126604244001,17.00],
[1126604244001,85.00],  [1122204245002,85.00], [1221104246003,85.00],
    [1222204247004,85.00], [1823304248005,85.00], [1424404249006,85.00], [1126604244001,17.00], [1126604244001,17.00],

我的愿望输出

temp.txt

[1126604244001,17.00],[1126604244001,17.00],[1126604244001,17.00],[1126604244001,17.00],[1126604244001,17.00],

提前致谢!

使用 sed,只需:

sed 's/\[[^]]*,85.00\],[[:space:]]*//g' filename

这样,与正则表达式 \[[^]]*,85.00\],[[:space:]]* 匹配的所有内容都会被删除。正则表达式匹配 [ 后跟任意数量的非 ] 字符,后跟 ,85.00], 和可选的空格;语法上唯一棘手的一点是 [^]] 字符集,它匹配除 ].

以外的所有字符

或者使用 awk:

awk -v RS='],' -v ORS='],' '!/,85.00$/' filename

这会将输入拆分为由 ], 分隔的记录,并仅打印那些不以 ,85.00 结尾的记录。

egrep -v '[^0-9]85\.00]' YourFile

删除(不为空)符合您的模式的行