用sed替换多个以空格开头的空格

时间:2015-03-29 19:02:16

标签: regex bash sed

我在/ 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'

返回预期结果,但同一语句不写入文件。简单地不在语句中添加额外的空格会写入文件,因此它不是文件系统权限问题。

1 个答案:

答案 0 :(得分:1)

应该是

sed -i 's/fake$/real$/' /etc/hosts

$匹配该行的结尾。您不需要g选项,因为每行只有一个匹配。