Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带有或(|)和制表符(\t)的egrep搜索无效_Regex_Grep - Fatal编程技术网

Regex 带有或(|)和制表符(\t)的egrep搜索无效

Regex 带有或(|)和制表符(\t)的egrep搜索无效,regex,grep,Regex,Grep,有一个文件包含以下内容 ➜ ~ 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
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

那么为什么第一个命令不起作用,哪里错了呢?怎么能让它也起作用呢?

您的备选选项周围需要括号:

egrep  '(^[0-9]{1,8}[[:space:]].*$)|(^[0-9]{10,}[[:space:]].*$)' foo
但实际上,你的第二个表达更有意义。搜索不包含9个数字的行,而不是包含1-8个数字或10个或更多数字的行。另外,
grep
可以接受文件名参数;无需使用
cat

看起来这就是你想要的:

egrep -v "^[0-9]{9}[[:space:]]" foo

您的备选选项周围需要括号:

egrep  '(^[0-9]{1,8}[[:space:]].*$)|(^[0-9]{10,}[[:space:]].*$)' foo
但实际上,你的第二个表达更有意义。搜索不包含9个数字的行,而不是包含1-8个数字或10个或更多数字的行。另外,
grep
可以接受文件名参数;无需使用
cat

看起来这就是你想要的:

egrep -v "^[0-9]{9}[[:space:]]" foo

谢谢但是使用egrep$(^[0-9]{1,8}\t.$)|(^[0-9]{10,}\t.$)'foo仍然没有输出。请注意表达式中有制表符。如果不想使用我的第二个建议,请不要在
|
周围加空格。刚刚编辑,忘记了grep正则表达式不喜欢制表符的
\t
。谢谢,您的第二个建议很有效。但是,如果在某些情况下,我必须将空格与
|
组合在一起,如何解决它?您是在寻找文本
|
?如果你是,我误解了这个问题。如果不是的话,我不知道你为什么要在它周围留出空间。谢谢!但是使用egrep$(^[0-9]{1,8}\t.$)|(^[0-9]{10,}\t.$)'foo仍然没有输出。请注意表达式中有制表符。如果不想使用我的第二个建议,请不要在
|
周围加空格。刚刚编辑,忘记了grep正则表达式不喜欢制表符的
\t
。谢谢,您的第二个建议很有效。但是,如果在某些情况下,我必须将空格与
|
组合在一起,如何解决它?您是在寻找文本
|
?如果你是,我误解了这个问题。如果不是,我不知道你为什么要在它周围有空间。