过滤命令输出时的regexp错误

MOH*_*MED 0 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       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 
Run Code Online (Sandbox Code Playgroud)

我想只提取包含Destination 01020300和Mask的行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"
Run Code Online (Sandbox Code Playgroud)

我是新手wuth regexp格式.你能帮助我为这个案子提供良好的正则表达式吗?

fed*_*qui 5

也许这更容易合作awk:

$ awk '$2=="01020300" && $8=="FFFFFF00"' file
br-lan  01020300        C0A80101        0003    0       0       3       FFFFFF00        0       0       0     
Run Code Online (Sandbox Code Playgroud)

这样,您可以参考第2列和第8列并检查其值,而不必担心格式.

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

awk -F"\t" '$2=="01020300" && $8=="FFFFFF00"' file
Run Code Online (Sandbox Code Playgroud)

如果你想从bash变量给出这个值,你可以这样做(参见评论,正如Glenn Jackman,Etan Reisner和Ed Morton给出了很好的解释):

awk -v d="$dest" -v m="$mask" '$2==d && $8==m' file
Run Code Online (Sandbox Code Playgroud)