筛选命令输出时出现regexp错误

筛选命令输出时出现regexp错误,regex,linux,shell,awk,ash,Regex,Linux,Shell,Awk,Ash,我想从以下命令中筛选行: $ cat /proc/net/route Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT br-lan 01020300 C0A80101 0003 0 0 3 FFF

我想从以下命令中筛选行:

$ cat /proc/net/route
Iface   Destination     Gateway         Flags   RefCnt  Use     Metric  Mask            MTU     Window  IRTT                               
br-lan  01020300        C0A80101        0003    0       0       3       FFFFFF00        0       0       0                                  
br-lan  03043836        C0A80101        0007    0       0       5       FFFFFFFF        0       0       0                                  
br-lan  C0A80100        00000000        0001    0       0       0       FFFFFF00        0       0       0 
我只想提取包含目标
01020300
和掩码
FFFFFF00

我尝试使用以下regexp,但它不起作用

cat /proc/net/route | grep "[^ \t\v]\+[ \t\v]\+$dest[ \t\v]\+[^ \t\v]\+[ \t\v]\+[^ \t\v]\+[ \t\v]\+[^ \t\v]\+[ \t\v]\+[^ \t\v]\+[ \t\v]\+[^ \t\v]\+[ \t\v]\+$mask"

我使用regexp格式。您能帮我为这个案例提供一个好的regexp吗?

也许使用
awk更容易:

$ awk '$2=="01020300" && $8=="FFFFFF00"' file
br-lan  01020300        C0A80101        0003    0       0       3       FFFFFF00        0       0       0     
通过这种方式,您可以参考第2列和第8列并检查其值,而不必担心格式

如果文件使用制表符而不是空格分隔域,请使用:

awk -F"\t" '$2=="01020300" && $8=="FFFFFF00"' file
如果您想从bash变量中给出这个值,您可以这样做(参见注释,正如Glenn Jackman、Etan Reisner和Ed Morton给出的很好的解释):


也许使用
awk
更容易:

$ awk '$2=="01020300" && $8=="FFFFFF00"' file
br-lan  01020300        C0A80101        0003    0       0       3       FFFFFF00        0       0       0     
通过这种方式,您可以参考第2列和第8列并检查其值,而不必担心格式

如果文件使用制表符而不是空格分隔域,请使用:

awk -F"\t" '$2=="01020300" && $8=="FFFFFF00"' file
如果您想从bash变量中给出这个值,您可以这样做(参见注释,正如Glenn Jackman、Etan Reisner和Ed Morton给出的很好的解释):


如果我的文件分隔符可以是空格和制表符,那么解决方案是什么呢?我尝试了
awk-F“\t”$2==“$dest”&&&8==“$mask””文件
,但它没有work@EtanReisner,或使用awk的
-v var=value
选项:
awk-v d=“$dest”-v m=“$mask”“$2==d&&$NF==m”文件
@EtanReisner如果要在awk脚本中嵌入shell变量的值,那么语法将是“$2==”“$dest””&&&$8==“$mask”
”,但无论如何都不应该这样做。@EdMorton很公平。在那个示例中,我没有考虑需要转义位置参数(尽管我知道您必须这样做)。我非常高兴让你选择这个车棚的颜色,因为我们都同意,它们的颜色比不画的颜色更糟糕。如果我的文件分隔符可以是空格和制表符,那么解决方案是什么呢?我尝试了
awk-F“\t”$2==“$dest”&&$8==“$mask””文件
,但它没有work@EtanReisner,或者使用awk的
-v var=value
选项:
awk-v d=“$dest”-v m=“$mask”'$2==d&&$NF==m'文件
@EtanReisner如果要在awk脚本中嵌入shell变量的值,那么语法将是
'$2==“$dest”&&&$8=“$mask”“$mask”
,但无论如何都不应该这样做。@EdMorton Fair>。在那个示例中,我没有考虑需要转义位置参数(尽管我知道您必须这样做)。我非常高兴让你选择这个车棚的颜色,因为我们都同意,他们的颜色比一开始就不油漆更糟糕。