如何提取已经匹配多行模式的文本?

时间:2011-03-10 08:25:44

标签: regex vim awk

所有 使用vim元字符\ _。或者awk,我已经匹配了多行,但我不知道如何将它们拉出或提取到其他文件中。是否有一般方法可以做到这一点?

4 个答案:

答案 0 :(得分:3)

这个答案适用于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 :(得分:1)

在awk中使用print然后将输出重定向到其他文件。

awk 'BEGIN {FS =" "};  { if ($0 ~ /(expression)/) { print $0 } }' inputfile.txt > outputfile.txt

答案 2 :(得分:0)

仅将模式复制到另一个文件

"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/#

答案 3 :(得分:0)

如果您处于搜索的开头,y//e<CR>会将整个匹配的字符串复制到默认寄存器中。请注意,在此操作之后n会将您带到当前搜索的末尾(因为保存了e偏移标记),如果您希望n继续将您带到开始,那么还应该输入//<CR>(清除所有偏移标志)。所以,整个键序列是

/<pattern><CR>y//e<CR>//<CR>N