正规表达式 sed

来源:百度知道 编辑:UC知道 时间:2024/06/09 13:35:01
问题描述:
res.txt
--------------------------------------------------
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.9.201.5
DHCP Server . . . . . . . . . . . : 192.9.201.1
DNS Servers . . . . . . . . . . . : 192.9.201.1
--------------------------------------------------

比如我要解析出Default Gateway这一行中的IP: 192.9.201.5
这里是试出来的结果:
cat res.txt|grep "Default Gateway" | sed -e 's/^Default Gateway.*: //'

问题是:
为什么下面这行匹配不出来?(唯一的差别是"*"前面没有".")
cat res.txt|grep "Default Gateway" | sed -e 's/^Default Gateway*: //'

"." 表示任意字元
"*" 表示其前字元可重复任意次

少一个.差别大得很
表达式 y*: 只能匹配的是 y: 、yy: 、yyy: 、……

简单的提取字符, grep 和 sed 只用其一就可以做到了

cat res.txt | grep "^Default Gateway" | grep -oE "([0-9]+.){4}"

sed 's/^Default Gateway.*: \([0-9.]*\)/\1/' res.txt

你的命令应该没有问题呀!!!我运行都没有问题...
强列建议你先检查一下在正则匹配中有没有多的空格或是少了空格!!!!!!
你试试加上几个参数看看(不过我想应该不是这的问题):
cat res.txt|grep "Default Gateway" | sed -e 's/^Default Gateway.*://gp' -n

万一不行,你可以用下面的命令,像你这样的问题一般应当使用awk命令,它的功能更加强大.
awk -F: '/^Default Gateway/{print $2}' res.txt
cat res.txt | awk -F: '/^Default Gateway/{print $2}'

如果还是不行的话,你可以跟我留言,到时候好好聊一聊...