当我用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
答案 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
。