我想在变量
中按模式grep精确字符串ip="192.168.100.1"
arp -a | grep "$ip"
输出如下内容:
# arp -a | grep "$ip"
? (192.168.10.1) at 66:ca:6d:88:57:cd [ether] on br0
? (192.168.10.15) at 3c:15:a0:05:b5:94 [ether] on br0
但我想要其他PC没有IP IP 另外我只有嵌入式grep(minimalistic)我也有awk,sed。
我正在尝试这个但没有成功:
arp -a | grep "\b$ip\b"
答案 0 :(得分:1)
\b
等词边界不适用于标准grep。从您发布的输出片段看起来这对您有用:
$ ip="192.168.10.1"
$ grep -F "($ip)" file
? (192.168.10.1) at 66:ca:6d:88:57:cd [ether] on br0
即。只需使用-F
作为字符串而不是正则表达式比较,并明确包含输入中IP地址周围出现的分隔符。
FWIW,请问:
$ awk -v ip="($ip)" 'index($0,ip)' file
? (192.168.10.1) at 66:ca:6d:88:57:cd [ether] on br0
并且您无法在sed中以合理的方式执行此操作,因为sed仅支持正则表达式比较,而不支持字符串(请参阅Is it possible to escape regex metacharacters reliably with sed)。
答案 1 :(得分:0)
如果我正确理解您所说的内容,您只想在命令中添加-o
选项,-o
选项仅打印匹配行的匹配(非空)部分,每个这样的部分都在一个单独的输出线上。
arp -a | grep -o "$ip"