0

我有以下 /etc/hosts 文件

[root@vhost41 tmp]# cat hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
119.13.248.1 ccvcds1.ihost.com vcds1
171.221.160.11 vhost.ihost.com vhost41


[root@vhost41 tmp]# echo $(ifconfig eth0 | grep "inet addr:" | cut -d ":" -f 2 | cut -d " " -f 1)
171.221.160.11

如何使用 sed 或 awk 单行将“AWSHOST”添加到匹配的 ip 行。所以变化将是:

[root@vhost41 tmp]# cat hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
119.13.248.1 ccvcds1.ihost.com vcds1
171.221.160.11 vhost.ihost.com vhost41 AWSHOST

我试图将上述命令的输出通过管道传递给 sed 和 awk,但它不起作用。非常感谢任何帮助

4

3 回答 3

2

你可以sed这样使用:

$ cat /etc/hosts
127.0.0.1       localhost
171.1.1.1 myhost

$ sudo sed -i 's/\(171\.1\.1\.1\).*/&\ mynewhost/g' /etc/hosts

$ cat /etc/hosts
127.0.0.1       localhost
171.1.1.1 myhost mynewhost

&符号&将被捕获的表达式替换,例如此处171.1.1.1 myhost,然后您将在此处附加转义空格和新主机别名mynewhost

编辑

正如David Ravetti所说,如果您不想原地编辑文件,可以添加要添加到备份文件的扩展名。

sed -i .bak ......

.bak然后文件将被编辑到位(替换为您的编辑),但原始文件将使用扩展名备份。

于 2013-01-17T18:09:05.717 回答
2
sed -i "/$(ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1)[ \t]/ s/$/ AWHOST/ " hosts
于 2013-01-17T18:11:09.263 回答
1

试试这个

sed -i "s/\(171.221.160.11\) \(.*\)/\1 \2 MYHOST/g" temp.txt

这是与awk

awk '{if ($1 == "171.221.160.11") {b=$1;for(i=1; i<=NF; ++i){$1="";a=a" "$i;}$0 =b" "a" ""MYHOST3" } print}' temp.txt > temp2.txt

我无法决定选择什么sedawk,所以现在我总是在两者中都做:)

于 2013-01-18T01:58:30.067 回答