Создание сценария Vim с помощью команды find -exec - PullRequest
0 голосов
/ 13 октября 2010

У меня есть небольшой скрипт 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.

Можете ли вы увидеть какие-либо очевидные ошибки с моим синтаксисом поиска?

Ответы [ 3 ]

4 голосов
/ 13 октября 2010

Я понял это! Для шаблона поиска необходим символ%: vim -c '%s/switch/to/' - правильный синтаксис.

2 голосов
/ 14 октября 2010

Когда я делаю подобные вещи, я стараюсь делать это в 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
0 голосов
/ 13 октября 2010

Вы должны избегать скобок в фразе exec (если вы этого не сделали, возможно, на форуме есть косые черты).Это должно закончиться \ {\} \;

...