全部 使用vim元字符\ _。或awk,我已经匹配了多行,但我不知道如何将其抽出或解压缩到其他文件中。是否有通用的方法来执行此操作?如何提取已经匹配多行模式的文本?
2
A
回答
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
在awk中使用print然后将输出重定向到其他文件。
awk 'BEGIN {FS =" "}; { if ($0 ~ /(expression)/) { print $0 } }' inputfile.txt > outputfile.txt
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/#
+0
这不回答这个问题。这些命令复制行,而不是多行模式! – Benoit 2011-03-11 06:33:27
0
如果你在搜索的开始,y//e<CR>
将复制整个匹配的字符串到默认的寄存器。请注意,在此动作n
将带您到当前搜索结束(因为e
偏移标志被保存),如果您想要n
继续使您开始,您应该另外键入//<CR>
(清除所有偏移标志)。因此,整个密钥序列是
/<pattern><CR>y//e<CR>//<CR>N
+0
也许是明确的,使用'// s'不会伤害。所以要完成你的答案,这可以记录到一个宏。 – Benoit 2011-03-11 15:50:01
相关问题
- 1. 仅提取模式匹配文本
- 2. 匹配和提取文件中的多行模式
- 3. 正则表达式匹配上提取多行文本区(C#)
- 4. 匹配多行模式
- 5. 已知的模式匹配
- 6. 从行/文件中提取所有匹配的模式
- 7. 如何在匹配perl文本后提取所需的行?
- 8. Python的提取模式匹配
- 9. 搜索文本字符串中的模式,然后提取匹配模式
- 10. 匹配多行文本模式后的字符串
- 11. 多模式匹配
- 12. 提取字符串匹配条件的模式匹配
- 13. 模式匹配文件中的文本?
- 14. 提取从字符串匹配模式
- 15. stringtemplate提取变量匹配模式
- 16. “模式匹配”和提取在C
- 17. 与多个匹配匹配的模式
- 18. 如何在两个文档中提取不匹配的文本
- 19. 如何提取匹配模式的子字符串?
- 20. 获取行号匹配的模式
- 21. 如何指定lua模式匹配尝试中的迭代次数?我已经
- 22. 模式匹配是非穷尽的,即使我已经指定了模式
- 23. 如何用Dir.glob匹配多个模式?
- 24. 在匹配第一行中的模式时从文件中提取4行
- 25. JavaScript文本中的模式匹配
- 26. 如何匹配Perl中模式匹配前后的行?
- 27. 从.cpp文件中提取匹配模式的'if'块
- 28. 在同一行匹配多个模式
- 29. 正则表达式来提取匹配之间的文本块
- 30. 只用正则表达式提取匹配的文本
不需要'CopyPatternToRegisterZ()'。改用'setreg('Z',submatch(0))'。如果你想这样做linewise然后'setreg('Z',submatch(0),'l')' – 2011-03-10 15:30:01
@Peter Rincker:'setreg'返回寄存器的值吗?如果不是更换会导致一些问题。 – Benoit 2011-03-10 15:45:17
成功时返回零,失败时返回非零。我现在看到为什么你创建了自己的功能。尽管运行替换后一个简单的'u'就可以达到这个效果。 – 2011-03-10 15:53:08