テキストファイルを操作したいです。次の形式のブロックがたくさん含まれています。
CLASS
...some stuff ...
END
各ブロックをコピーし、その内容の1行を追加および削除したいと思います。スクリプトを書くことはできますか?
ベストアンサー1
わかったできる何でも書いてください。
ただし、これによりvim
マクロが使用されます。 (まだ慣れていない場合はvim
学ぶ必要があり、そうでない場合は無視してください)
いくつかの基本的なガイドライン:
q - マクロ記録の開始
qx - マクロの記録を停止し、名前を「x」として指定します。
@x - "x"というマクロを実行します。
マクロは、履歴セッション中に入力したすべてのコマンドを直ちに再実行します。
したがって、マクロに次のようにブロックをコピーさせるには:
q start macro
/CLASS jump to next "CLASS"
V start selecting full lines
/END jump to next "END
Y yank selected lines (yank = copy)
j scroll down one line
p put (paste)
qd stop recording and name the macro d
vimの使い方とvimマクロの良いリソースと例がたくさんあります。
価値ある点は、sedがvimのコマンドラインバージョンであるため、私が言う内容をsedに適用できるかもしれませんが、私はそれに慣れていないので保証できません。
~~編集~~
より便利にするもう一つのことは、複数のvim
ファイルを開くことができることです。複数のオープンファイルをバッファと呼びます。複数のファイル名を追加してこの機能を有効にできますvim
(IEはvim *.txt
すべてのtxtファイルを開きます)。
複数のバッファでマクロを実行するには、まずすべてのファイルを同時に開きます。次に、各バッファで:bufdo normal @x
マクロ実行を使用します。x
:w
現在のバッファが保存されていない場合は、次のバッファに切り替えようとして中断されるのを防ぐために、このステップをマクロの最後のステップにする必要があります。
:bn
手動で次のバッファに移動します。
また見てくださいhttps://stackoverflow.com/questions/1291962/replay-a-vim-macro-until-end-of-buffer各行に対してマクロを実行する方法を学びます。リアンリアンカン:)