sed在IP地址后查找并替换包含字符串的行

时间:2013-04-24 18:17:46

标签: linux bash shell sed awk

我尝试使用sed在IP地址后找到包含字符串的行并替换该行。为了说明,我有一个像这样的文本文件......

192.168.10.155 Mike
8.8.8.8 Googley
123.231.123.3 Tom
192.238.8.10 Matt

让我们说我想找到并替换Tom的线路,我希望在一个IP地址和空格之后匹配Tom。 IP地址的每个八位字节可以具有1到3个数字。目前,我有......

newIpAddress="111.111.111.111"
sed -i "/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} Tom/c\$newIpAddress Tom" file

但这似乎不起作用。关于如何修复第一部分以在每个八位字节1至3位数的任何IP地址上动态匹配的任何想法?

2 个答案:

答案 0 :(得分:2)

以下是awk方法:

$ new_ip=1.1.1.1    

$ awk -v ip="$new_ip" '$2=="Tom"{$1=ip}1' file
192.168.10.155 Mike
8.8.8.8 Googley
1.1.1.1 Tom
192.238.8.10 Matt

答案 1 :(得分:1)

sed -ri "/[0-9]{1,3}(\.[0-9]{1,3}){3} Tom$/c$newip Tom" file