我在/ etc / hosts中有输入:
127.0.0.1 fake.hostname.net fake
我想将第二个fake
替换为real
。以下sed语句尝试通过匹配前面的两个空格来过滤两者,但它什么也不做:
sed -i -e 's/ fake/ new/g' /etc/hosts
结果是:
127.0.0.1 fake.hostname.net fake
预期结果是:
127.0.0.1 fake.hostname.net new
我也尝试了以下相同的结果:
sed -i -e 's/\s\sfake/\s\snew/g' /etc/hosts
为什么会发生这种情况,我该怎么做才能解决这个问题?我正在运行Ubuntu 14.04.1服务器。我不想简单地替换第二场比赛,因为我期待的是:
127.0.0.1 asdf.hostname.net fake
同样,空间匹配是唯一可接受的方法。
echo "127.0.0.1 fake.hostname.net fake" | sed -e 's/ fake/ new/g'
返回预期结果,但同一语句不写入文件。简单地不在语句中添加额外的空格会写入文件,因此它不是文件系统权限问题。
答案 0 :(得分:1)
应该是
sed -i 's/fake$/real$/' /etc/hosts
$
匹配该行的结尾。您不需要g
选项,因为每行只有一个匹配。