首页 > 解决方案 > 为什么 sed 删除大于符号

问题描述

sed当我运行我的命令时,小于号被删除。

a::b<type::value> & d
a::b<ns::type::value>& d
sed -i 's/[^:]type/changed::type/g'

结果是

a::bchanged::type::value> & d
a::b<ns::type::value>& d

我预计实际上会得到以下结果:

a::b<changed::type::value> & d
a::b<ns::type::value>& d

为什么要删除小于号?我怎样才能保留它?

标签: regexunixsedstr-replace

解决方案


该符号被删除,因为它匹配[^:]“不是冒号”,作为要替换的字符串的一部分。您可以通过捕获并放回它来绕过它:

sed -i 's/\([^:]\)type/\1changed::type/g'

推荐阅读