regex - 为什么 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
为什么要删除小于号?我怎样才能保留它?
解决方案
该符号被删除,因为它匹配[^:]
“不是冒号”,作为要替换的字符串的一部分。您可以通过捕获并放回它来绕过它:
sed -i 's/\([^:]\)type/\1changed::type/g'
推荐阅读
- python - Pandas:根据列中的当前值设置先前的值(按组)
- python - 如何获得字典的价值
- mysql - 三张表连接后如何找到最常见的值
- cobalt - 运行 JQuery 的钴浏览器
- angular - 显示来自本地存储 Angular 7 的更新数据 [解决]
- flutter - Flutter 中带有溢出文本的 FlatButton.icon
- postgresql - 使用 Traefik+Odoo+Postgres .yml 启动更多容器
- kotlin - vertx-lang-kotlin-coroutines 测试失败
- python - 用 numpy 数组替换数据框中的列
- svelte - Degit 究竟代表什么?