0

我想从以下命令中过滤行:

$ 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

我尝试使用以下正则表达式,但它不起作用

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"

我是新的正则表达式格式。你能帮我用一个好的正则表达式来解决这个问题吗?

4

1 回答 1

5

也许这样做更容易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
于 2014-04-29T16:21:36.520 回答