我正在尝试grep“option dhcp-server-identifier”的值,即192.168.75.1;
我不确定如何忽略IP地址末尾的分号“; ”。
[root@localhost ~]# cat /var/lib/dhclient/dhclient-eth0.leases
lease {
interface "eth0";
fixed-address 192.168.75.54;
option subnet-mask 255.255.255.0;
option routers 192.168.75.1;
option dhcp-lease-time 4294967295;
option dhcp-message-type 5;
option domain-name-servers 192.168.75.1,8.8.8.8;
option dhcp-server-identifier 192.168.75.1;
option broadcast-address 192.168.75.255;
option host-name "centos-64-x86-64";
option domain-name "cs2cloud.internal";
renew 1 2081/12/15 18:43:55;
rebind 2 2132/12/30 03:09:24;
expire 6 2150/01/03 21:58:02;
}
我试过以下
grep dhcp-server-identifier /var/lib/dhclient/dhclient-eth0.leases | awk '{print $3}'
结果是192.168.75.1;
谢谢
答案 0 :(得分:4)
使用awk
awk -F" |;" '/dhcp-server-identifier/ {print $3}' /var/lib/dhclient/dhclient-eth0.leases
192.168.75.1
答案 1 :(得分:3)
请记住,如果你正在使用awk,你可以简单地使用awk。以下是等效的:
$ grep dhcp-server-identifier /var/lib/dhclient/dhclient-eth0.leases | awk '{print $3}'
$ awk '/dhcp-server-identifier/ {print $3}' /var/lib/dhclients/dchclicent-eth0.leases
您的问题是分号出现在名称的末尾。我们可以使用awk的$3
函数删除最终字符,而不是简单地打印substr
。这是对awk手册页的引用:
substr(s,m,n)
从位数m开始的s的n字符子串从1开始计算。长度其参数的长度为字符串,如果没有参数则为$ 0.
所以,我们需要$3
的子串从第一个位置(1)到$3
的长度减去最后一个字符,所以我们需要从第一个字符转到{{1 }}:
length ($3) - 1
应该这样做:
substr($3, 1, length($3) - 1)
应该这样做。
答案 2 :(得分:2)
使用sed
:
sed -n 's/.*option dhcp-server-identifier \(.*\);/\1/p' file
grep
和egrep
:
grep 'option dhcp-server-identifier' file | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'
输出:
192.168.75.1
答案 3 :(得分:2)
awk
函数substr
:
~ $ echo "Hello My Friend!" | awk '{print substr($3,0,length($3)-1)}'
Friend
Awk是一个非常强大而完整的编程语言。如果你发现自己每天都会多次使用它,那么你可以通过学习更多的东西(特别是正则表达式处理部分),在每天的bash工作流程中获益。
答案 4 :(得分:1)
grep dhcp-server-identifier /var/lib/dhclient/dhclient-eth0.leases | cut -d ' ' -f3 | cut -d';' -f1
命令说明:获取具有'dhcp-server-identifier'的行。按空格分割,并显示第3选择。拆分';'并告诉我第一个选择。
hek2mgl答案是我喜欢使用的答案;但对于初学者,我通常建议使用比sed更简单的工具。
答案 5 :(得分:0)
awk 版本:
awk -F'[ ;]' '/dhcp-server-identifier/ {print $(NF-1)}' /var/lib/dhclient/dhclient-eth0.leases
使用NF-1更安全,以防你有更多的空格。
perl 版本:
perl -ne 'print if s/^.*dhcp-server-identifier +([0-9.]+);$/$1/' /var/lib/dhclient/dhclient-eth0.leases
我认为这是最安全的1-liner。
来自 hek2mgl 的sed 版本也不错。