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 

01020300Destinationと 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"

私は正規表現形式を初めて知りました。この場合の適切な正規表現を教えていただけませんか?

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 に答える