有一个文件包含以下内容,
➜ ~ cat foo
123 456
1234 1234
123456789 12345678
123456789 12345678
12345678901234567890 12345678901234567890
并且只有第一列是9位数(\d{9}
)有效,所以我想grep那些无效行,首先我尝试下面的命令并且它不起作用
➜ ~ cat foo | egrep $'^[0-9]{1,8}\t.*$ | ^[0-9]{10,}\t.*$'
没有输出。
然后我尝试了以下命令,这次它可以工作
➜ ~ cat foo | egrep -v $'^[0-9]{9}\t.*$'
123 456
1234 1234
12345678901234567890 12345678901234567890
那么为什么第一个命令不起作用,哪里出错了?怎么能让它也有用呢?
答案 0 :(得分:0)
您需要使用替代选项括号:
egrep '(^[0-9]{1,8}[[:space:]].*$)|(^[0-9]{10,}[[:space:]].*$)' foo
但实际上,你的第二个表达更有意义。搜索不包含9个数字的行,而不是包含1-8个数字或10个或更多数字的行。此外,grep
可以接受文件名参数;没有必要使用cat
。
看起来这就是你要找的东西:
egrep -v "^[0-9]{9}[[:space:]]" foo