我有一个带有以下几行的主机文件:
pthread_cond_wait
服务器IP为:192.168.1.1,由下面的IP变量表示:
127.0.0.1
127.0.1.1 servername
我想用$ IP替换以127.0开头的第二个条目,即:
而不是:
IP=192.168.1.1
应该是:
127.0.1.1 servername
我尝试使用以下sed语句:
192.168.1.1 servername
但是它替换了整行,同时也删除了服务器名,然后用:
sed "0,/127.0.*/! s/127.0.*/$IP/" /etc/hosts
它应该是:
127.0.0.1 localhost.localdomain localhost
192.168.1.1
答案 0 :(得分:0)
.
是一个正则表达式有效字符,您需要使用反斜杠(\
)对其进行转义,.*
将匹配所有内容,直到EOL,使用否定的字符类匹配所有内容,直到第一个空白字符为止。sed '0,/^127\.0\./! s/^127\.0\.[^[:blank:]]*/'"$IP"'/' file
顺便说一句,您可以使用awk更安全,更可靠地完成此任务:
$ awk -v IP="$IP" 'n<2 && index($1,"127.0.")==1 && ++n==2 { $1=IP } 1' file
127.0.0.1
192.168.1.1 servername