我有以下/ 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,但它无法正常工作。任何帮助非常感谢
答案 0 :(得分: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
扩展名进行备份。
答案 1 :(得分:2)
sed -i "/$(ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1)[ \t]/ s/$/ AWHOST/ " hosts
答案 2 :(得分: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
我无法决定选择sed
或awk
的内容,所以现在我总是这样做:)