我在使用sed删除行时似乎遇到了一个简单的正则表达式问题

时间:2019-03-18 21:48:28

标签: regex sed

当我用grep ^[0-9{7}]*时,它会检测到我需要的所有行。但是当我运行它时,它只会删除所有内容。

我找不到正确转义sed命令的参考。我知道这也是RTFM时刻:(

sed '/^[0-9{7}]*/d' simple.txt

4216333 2018-06-11T17:27:16-0500    446421648264    140843
4153130 2018-06-11T17:27:15-0500    446421650974    142398
4154997 2018-06-11T17:27:15-0500    446421650985    142399
4155087 2018-06-11T17:27:15-0500    446421650996    142400
4155543 2018-06-11T17:27:15-0500    446421651000    142401
4155615 2018-06-11T17:27:15-0500    446421651010    142402
4155650 2018-06-11T17:27:15-0500    446421651021    142403
4155681 2018-06-11T17:27:14-0500    446421651032    142404

1 个答案:

答案 0 :(得分:2)

^[0-9{7}]*模式与以0或多个数字,{}字符开头的行匹配。因此,它匹配任何行。

要删除以7位开头的行,可以使用以下基于POSIX BRE的sed命令:

sed '/^[0-9]\{7\}/d' simple.txt

或者,使用POSIX ERE模式(其中{x}量词不需要转义):

sed -E '/^[0-9]{7}/d' simple.txt

请注意,如果要忽略所有第一个非空白块不等于7位的行,则使用awk会更方便:

awk '$1 !~ /^[0-9]{7}$/' simple.txt

使用sed(BRE POSIX,没有-E选项),它将看起来像/^[0-9]\{7\}[[:blank:]]/d/^[0-9]\{7\}[[:space:]]/d/^[0-9]\{7\}\>/d/^[0-9]\{7\}\b/d