Как экспортировать совпадения только при поиске по шаблону в vim?

StackOverflow https://stackoverflow.com/questions/3031761

  •  27-09-2019
  •  | 
  •  

Вопрос

Есть ли способ получить и экспортировать часть совпадения только при поиске по шаблону, не изменяя текущий файл?

Например, из файла, содержащего:

57","0","37","","http://www.thisamericanlife.org/Radio_Episode.aspx?episode=175"
58","0","37","","http://www.thisamericanlife.org/Radio_Episode.aspx?episode=170"

Я хочу экспортировать новый файл, содержащий:

http://www.thisamericanlife.org/Radio_Episode.aspx?episode=175
http://www.thisamericanlife.org/Radio_Episode.aspx?episode=170

Я могу сделать это, используя замену следующим образом:

:s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
:%w>>data

Но команда замены меняет текущий файл.Есть ли способ сделать это без изменения текущего файла?

Обновлять:

Я ищу такую ​​команду:

:g/pattern/.w>>newfile

Эта команда записывает всю строку, где встречается совпадение.Я хочу экспортировать только совпадение, а не всю строку.

Это было полезно?

Решение

Просто измените свой заказ:

 :w newfile.txt
 :e newfile.txt
 :%s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
 :w

Другие советы

redir >>newfile
g/^/let g:match=matchstr(getline(line('.')), pattern) | if g:match!=#"" | silent echo g:match | endif
redir END

Объяснение:

redir >> newfile
Начать перенаправление сообщений в файл newfile, добавьте, если он существует.
g/^/
Для каждой строки
getline(line('.'))
получить содержимое строки
let g:match(getline(line('.')), pattern)
найди часть строки, которая соответствует pattern и сохраните его в g:match переменная
if g:match!=#""
если линия соответствует шаблону
echo g:match
выходная соответствующая строка
silent echo g:match
но только в место, указанное redir команда.
redir END
Прекратите перенаправление вывода.

Вы имеете в виду это?

:e currfile.txt
:s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
:w newfile.txt

Или вы хотите продолжить редактирование предыдущего файла?

РЕДАКТИРОВАТЬ: Или вы можете просто отменить действие (нажмите «u»).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top