有没有办法只在模式搜索中抓取并导出匹配部分而不更改当前文件?
例如,来自包含以下内容的文件
57","0","37","","http://www.thisamericanlife.org/Radio_Episode.aspx?episode=175"
58","0","37","","http://www.thisamericanlife.org/Radio_Episode.aspx?episode=170"
我想导出一个包含以下内容的新文件:
http://www.thisamericanlife.org/Radio_Episode.aspx?episode=175
http://www.thisamericanlife.org/Radio_Episode.aspx?episode=170
我可以通过使用这样的替换来做到这一点:
:s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
:%w>>data
但替换命令会更改当前文件。有没有办法在不更改当前文件的情况下执行此操作?
更新
我正在寻找这样的命令:
:g/pattern/.w>>newfile
此命令写入匹配发生的整行。我想只导出匹配,而不是整行。
答案 0 :(得分:2)
redir >>newfile
g/^/let g:match=matchstr(getline(line('.')), pattern) | if g:match!=#"" | silent echo g:match | endif
redir END
说明:
redir >> newfile
newfile
,如果存在则附加。g/^/
getline(line('.'))
let g:match(getline(line('.')), pattern)
pattern
匹配的行的一部分,并将其保存在g:match
变量if g:match!=#""
echo g:match
silent echo g:match
redir
命令指定的位置。redir END
答案 1 :(得分:2)
只需更改您的订单:
:w newfile.txt
:e newfile.txt
:%s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
:w
答案 2 :(得分:0)
你是说这个吗?
:e currfile.txt
:s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
:w newfile.txt
或者您想继续编辑上一个文件吗?
编辑:或者您可以撤消(按'u')。