使用 Ubuntu 12.04 和 vim 2.22.0,为什么在 vim 中我应该使用:
:9s/\d\+/1/
将所提及行的第一位数字更改为 1,但无法使用 sed 执行相同的操作:
sed -i '9s/\d\+/1/' /home/file/foo
我仍然没有收到任何错误,文件中也没有任何更改。vim 和 sed 命令的功能之间是否存在不一致?
答案1
sed 和 vim 并不相关(虽然有点相关,但关系并不大)。它们的替换命令类似,但远非完全相同。它们都使用基本正则表达式,但 vim 有其扩展,而 GNU sed 有其他扩展。
\d
在 vim 中匹配数字,在 GNU sed 中匹配d
。要在 sed 中匹配数字,请使用[[:digit:]]
或[0-9]
(这些在 vim 中也有效)。
\+
也是 vim 和 GNU sed 中的扩展。匹配一个或多个的标准方法是使用\{1,\}
。