Как извлечь текст, который уже соответствует шаблону из нескольких строк? - PullRequest
2 голосов
/ 10 марта 2011

все используют метасимвол vim \ _.или awk, я сопоставил несколько строк, но я не знаю, как восстановить или извлечь их в другие файлы. Есть ли общий способ сделать это?

Ответы [ 4 ]

3 голосов
/ 10 марта 2011

Этот ответ относится к Vim, а не к Awk.

Я могу предложить:

function CopyPatternToRegisterZ(pat)
  let @z .= a:pat
  return a:pat
endfunction

А затем:

:let @z = ''
:%s/your_pattern/\= CopyPatternToRegisterZ(submatch(0)) /g

Тогда вы можете использовать "zp чтобы вставить свои совпадения в другой файл.

Подробнее об этом синтаксисе см. :help sub-replace-expression.

1 голос
/ 10 марта 2011

использовать print в awk, затем перенаправить вывод в другой файл.

awk 'BEGIN {FS =" "};  { if ($0 ~ /(expression)/) { print $0 } }' inputfile.txt > outputfile.txt
0 голосов
/ 10 марта 2011

Если вы находитесь в начале поиска, y//e<CR> скопирует всю совпавшую строку в регистр по умолчанию.Обратите внимание, что после этого действия n приведет вас к концу текущего поиска (так как e флаг смещения сохранен), если вы хотите, чтобы n продолжал приводить вас к началу, вы должны дополнительно набрать //<CR>(это очищает все флаги смещения).Итак, вся последовательность клавиш:

/<pattern><CR>y//e<CR>//<CR>N
0 голосов
/ 10 марта 2011

Только для копирования шаблона в другой файл

"between marks 
:'a,'b g/^Error/ . w >> errors.txt

"entire file
:% g/pattern/ . w >> log.txt

"to display "whit numbers", lines containing the desired pattern
:g/pattern/#
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...