【发布时间】:2011-07-12 13:00:13
【问题描述】:
全部 使用 vim 元字符 \_。或awk,我已经匹配了多行,但我不知道如何将它们拉出或提取到其他文件中。有没有一般的方法可以做到这一点?
【问题讨论】:
全部 使用 vim 元字符 \_。或awk,我已经匹配了多行,但我不知道如何将它们拉出或提取到其他文件中。有没有一般的方法可以做到这一点?
【问题讨论】:
如果您在开始搜索,y//e<CR> 会将整个匹配的字符串复制到默认寄存器中。请注意,此操作后n 会将您带到当前搜索的末尾(因为保存了e 偏移标志),如果您希望n 继续将您带到开始,您应该另外输入//<CR> (清除所有偏移标志)。所以,整个按键序列是
/<pattern><CR>y//e<CR>//<CR>N
【讨论】:
//s 不会受到伤害。因此,为了完成您的答案,可以将其记录到宏中。
只复制模式到另一个文件
"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/#
【讨论】:
在 awk 中使用 print 然后将输出重定向到其他文件。
awk 'BEGIN {FS =" "}; { if ($0 ~ /(expression)/) { print $0 } }' inputfile.txt > outputfile.txt
【讨论】:
这个答案适用于 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。
【讨论】:
CopyPatternToRegisterZ()。请改用setreg('Z', submatch(0))。如果您想按行执行此操作,则 setreg('Z', submatch(0), 'l')
setreg 是否返回寄存器的值?如果不是,更换可能会导致一些问题。
u 就可以达到效果。