使用sed命令时出现zsh: event not found错误的排查与解决
解决zsh中sed命令的"event not found"错误
错误原因
你的sed命令用双引号包裹,zsh会解析其中的!作为历史事件扩展符,尝试查找匹配的历史命令,这直接触发了zsh: event not found错误。同时双引号内的转义规则复杂,容易导致特殊字符解析混乱。
解决方法
方法1:改用单引号包裹sed脚本(推荐)
单引号会让zsh完全不解析内部的特殊字符,只需处理sed脚本内的单引号转义即可。sed中在单引号字符串内嵌入单引号,需要用'\''的格式拼接:
sed 's/map('\''t'\'', '\''<Esc>'\'', '\''<C-\\><C-n>'\'')/map('\''t'\'', '\''<Esc>'\'', '\''<C-\\><C-n>:q!<cr>'\'')/g' ~/.config/nvim/lua/core/keymaps.lua
方法2:对双引号内的!转义
如果坚持使用双引号,需要把!转义为\!,避免zsh触发历史扩展:
sed "s/map(\x27t\x27, \x27<Esc>\x27, \x27<C-\\\\><C-n>\x27)/map(\x27t\x27, \x27<Esc>\x27, \x27<C-\\\\><C-n>:q\!<cr>\x27)/g" ~/.config/nvim/lua/core/keymaps.lua
方法3:更换sed替换分隔符
可以用#或其他非冲突字符作为sed的替换分隔符,减少转义复杂度:
sed 's#map('\''t'\'', '\''<Esc>'\'', '\''<C-\\><C-n>'\'')#map('\''t'\'', '\''<Esc>'\'', '\''<C-\\><C-n>:q!<cr>'\'')#g' ~/.config/nvim/lua/core/keymaps.lua
内容的提问来源于stack exchange,提问作者Tejinder Singh
相关产品推荐
相关产品推荐

