2010-08-30 4 views
2

Я ищу команду в VI/VIM для поиска определенного текста в файле и захвата всей строки и вывода на экране или отдельном файле. напримерvi, найти строку и вывод/вывод для отдельного файла

This is some line with this _word_ and some other text. 
This is some line with this some other text and some other text. 

так что это будет выводить только первая линия ..

+1

Есть ли причина, по которой вы не можете просто использовать grep? – ngroot

+0

не уверен, как ..: P – ra170

+0

'grep word filename' То, что вы просите, - это именно то, что делает grep. – ngroot

ответ

3
:redir > output.txt 
:g/_word_/p 
:redir END 

линия будет выводить на экран и output.txt. См. :h :redir.

EDIT: Я согласен с другими, которые предлагают использовать простой старый * nix grep, если сможете. Ситуации, в которых вы, возможно, не сможете использовать grep:

  • Вы ищете текст буфера, которого нет в файле в файловой системе.
  • Вы используете Вим-специфические расширения регулярных выражений, как курсор место, номер столбца, знаков и т.д.
  • Вы хотите сделать это в кросс-платформенной способом, и grep не может существовать в системе, которую вы используете ,

redir может быть полезен в этих ситуациях.

+0

КПП. вы знаете, как переделать C: \ somepath \ под cygwin? – ra170

+0

Что-то вроде '/ cygdrive/c/somepath'. –

0

в VI, из командного режима

поиск _word_

/_word_ 

дергать линии

yy 

паста линии

p 
+0

ну, у меня несколько тысяч строк, я хотел сделать это более упорядоченным способом. аналогично команде DOS: find/i «String» «c: \ my src \ myfile.txt» – ra170

+1

, затем используйте grep в качестве исходного комментария, предложенного – Zak

+0

Не знаете как: P ... – ra170

1

использовать г (глобальные) Команда:

:g/_word_/y 

будет дергать все строки, содержащие _word_


Упомянув find команду DOS, вы, вероятно, хотите использовать grep:

grep -h '_word_' * > results 
+0

Я склоняюсь перед вашим превосходным мастерством vi – Zak

Смежные вопросы