我有一个小的Vim脚本,可以进行多行搜索并替换:
vim -c 's/^ *<hi a=\"26\">\nHello/<td height=\"26\">\r<\/table>\r<bla \/>' \
-c 'w!' -c 'q' test.html
有效。但是,当我把它放在find -exec中时,在目录中递归执行:
find . -iname 'test.html' -exec \
vim -c 's/^ *<hi a=\"26\">\nHello/<td height=\"26\">\r<\/table>\r<bla \/>' \
-c 'w!' -c 'q' \
{} \;
test.html保持不变,Vim给了我这个错误:
Pattern not found:
^ *<hi a=\"26\">\nHello
in ./test.html
这真的很奇怪,因为这是正确的正则表达式,我可以在Vim中手动搜索它成功。
你能用find语法看到任何明显的错误吗?
答案 0 :(得分:4)
我明白了!搜索模式需要%字符:vim -c '%s/switch/to/'
是正确的语法。
答案 1 :(得分:2)
当我做这样的事情时,我倾向于在vim中做这件事。
:vimgrep /^ *<hi a=\"26\">\nHello/ **/*
然后创建和执行递归宏:
qbq
qa (actually you don't press enter after this)
:silent! !p4 edit % " check out the file
:e " refresh the r/w status
:%s/^ *<hi a=\"26\">\nHello/<td height=\"26\">\r<\/table>\r<bla \/>
:w " no need to force write if it's r/w
:cnf
q
qb@a@bq
@b
答案 2 :(得分:0)
你必须逃避exec短语中的大括号(假设你没有,也许论坛帖子吃了反斜杠)。它应结束\ {\} \;