Vim:正規表現マッチラインをマージ

Vim:正規表現マッチラインをマージ

Windows 2008サーバーでは、Cygwinを介してrsyncを実行して生成されたログを貼り付けました。データを新しいファイルサーバー(Synology)に同期し、エラー以外のアイテムを削除した後に処理する必要がある他のいくつかのエラーがありますが、すべてインターリーブされます。

私が望むものは、迅速かつ簡単に(好ましくはvimを使用して)さまざまなエラータイプを分離することで、「rsync:send_files(blah blah)」で始まるすべての行をマージし、「File gone:」で始まるすべての行をマージします。です。待つ。

基本的には、正規表現を一致させ、関連するすべての行を取り出したり削除したり、同じファイルに貼り付けたり、すべて同じ場所に貼り付けたり、新しいファイル/バッファに貼り付けたりする方法を見つけようとしています。

編集:ちょうどアイデアが思い浮かんだ。このデータをソートすると、私が望むものを得ることができます。外部ツールを使用してこれを行うことはできますが、vim内でsortを呼び出すか、vimのデフォルト環境のツールを使用してvim内で実行できますか?実際、私はこれを他のツールよりもvimをよりよく使う方法を学ぶための練習として使います。

いくつかの情報が修正されたログファイルの小さなサンプル:

rsync: send_files failed to open "/cygdrive/E/Users/SharedFiles/3DS SALES/3DS MARKETING/PORTFOLIOS/2012 - Portfolios/Signage"XXXXXXXX Full Res photos/xxxxx xx sky/.DS_Store": Permission denied (13)
file has vanished: "/cygdrive/E/Users/SharedFiles/3DS SALES/CURRENT SALES/xxxxxxxxx xxx xxxxx xxxxx xxxx - xxxx/02_PROPOSAL-QUOTATION/15-002 - xxxx xxxx xxxx - Replacement  Private Fuction  Event Board.xlsx"
rsync: opendir "/cygdrive/E/Users/SharedFiles/3DS SALES/CURRENT SALES/Archived Projects/ARCHIVES -xxxxx light/Hootsuite xxxxxx Info" failed: Permission denied (13)
rsync: opendir "/cygdrive/E/Users/SharedFiles/3DS STAFF/Cortney/xxxxx/MANUAL/Support Files/xxx/Photos-Jan-2013" failed: Permission denied (13)
file has vanished: "/cygdrive/E/Users/SharedFiles/3DS STAFF/Reg/2012 - DEAD PROJECTS/2213-xxxxxx&am;C 60x114-5-HR_pdf/xxxxxx 60 x114.5 _HR.pdf"
file has vanished: "/cygdrive/E/Users/SharedFiles/3DS STAFF/Reg/2012 - DEAD PROJECTS/2213-xxxxxx&am;C 60x114-5-HR_pdf/xxxxxx 47 x94_HR.pdf"
Time value of 3DS STAFF/X-employees/xxxxxxx/Jobs- do not remove/1OLD FILES/J-M/Jade/xxxxx logo_cmyk.ai-print on paper.eps truncated on receiver.
Time value of 3DS STAFF/X-employees/xxxxxx/Jobs- do not remove/1OLD FILES/J-M/Jade/xxxx logo_rgb.ai-website.eps truncated on receiver.
file has vanished: "/cygdrive/E/Users/SharedFiles/3DS STAFF/X-employees/xxxxx/Found on iMac/xxxxxx FOLDER/Databases " Presentations " Portfolios/Databases/Database  C .xlsx"
file has vanished: "/cygdrive/E/Users/SharedFiles/CURRENT FILES/12050 - xxxxx Canada - xxxxx National Park/ARTWORK DRAWINGS/xxxxx Graphic Layouts/Batch 4 pdfs for Trish/kathy's Batch 4 pdfs for xxxxx/Links/1 =1' person .eps"
rsync: opendir "/cygdrive/E/Users/SharedFiles/CURRENT FILES/12050 - xxxxx Canada - xxxxx National Park/MANUAL/03_ xxxxx Final Manual_June-2014/ MANUAL FOR CLIENT" failed: Permission denied (13)
rsync: opendir "/cygdrive/E/Users/SharedFiles/CURRENT FILES/12050 - xxxxx Canada - xxxxx National Park/MANUAL/03_ xxxxx Final Manual_June-2014/SECTION 2.0-Exhibits" failed: Permission denied (13)
rsync: opendir "/cygdrive/E/Users/SharedFiles/CURRENT FILES/12050 - xxxxx Canada - xxxxx National Park/MANUAL/03_ xxxxx Final Manual_June-2014/SECTION 7.0_Appendices/Appendix E - Artifact Conservation and Maintenance Manual" failed: Permission denied (13)

ベストアンサー1

次の目的で使用できます:redir

                                                        *:ガンディ* *:ガンディ*
:redi[r][!] > {file} メッセージを {file} ファイルにリダイレクトします。このメッセージ
                        コマンドの出力はこのファイルに書き込まれます。
                        リダイレクトが終わるまで。メッセージは同じままです。
                        画面に表示されます。 [!]が含まれている場合、
                        既存のファイルを上書きしました。 [!]が省略された場合
                        そして{file}があると、コマンドは失敗します。
                        一度に1つの「:redir」のみを有効にできます。呼ぶ
                        ":redir"は以前のアクティブなリダイレクトをすべて閉じます。
                        新しいターゲットにリダイレクトを開始します。

したがって、目的のメッセージをキャプチャして現在のファイルに追加するには、次の手順を実行します。

:redir @+
:g/vanished/
:g/send_files/
:g/any_other_regex_you_want/
:redir END
"+P

次に、一致する正規表現をクリップボードレジスタ(@+)に送信し、それを現在の文書に貼り付けます"+P

おすすめ記事