1

現在のファイルを変更せずに、パターン検索でのみ一致部分を取得してエクスポートする方法はありますか?

たとえば、次のファイルを含むファイルから:

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

このコマンドは、一致が発生する行全体を書き込みます。行全体ではなく、一致するものだけをエクスポートしたい。

4

3 に答える 3

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
出力のリダイレクトを停止します。
于 2010-06-13T13:02:39.357 に答える
2

注文を変更するだけです:

 :w newfile.txt
 :e newfile.txt
 :%s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
 :w
于 2010-06-13T13:03:38.997 に答える
0

これですか?

:e currfile.txt
:s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
:w newfile.txt

または、前のファイルの編集を続行しますか?

編集:または、単に元に戻すことができます(「u」を押します)。

于 2010-06-13T10:07:06.100 に答える