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



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

$ 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 "[^ tv]+[ tv]+$dest[ tv]+[^ tv]+[ tv]+[^ tv]+[ tv]+[^ tv]+[ tv]+[^ tv]+[ tv]+[^ tv]+[ tv]+$mask"

我刚开始使用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 -v d="$dest" -v m="$mask" '$2==d && $8==m' file

最新更新