全部 使用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