vim エディタでテキスト処理をバッチ化

LINEで送る
Pocket

大量のテキストファイルの編集、置換を行う場合、sed,trなどのコマンドを使って行って いるのではないでしょうか?しかし普段使っていないと、コマンドのオプション、書式どうだっけ? と、検索して調べることになると思います。
もし普段、エディタにvi(vim)を使っているのであれば、 vim コマンドを使って一括置換するのも一つの手です。 ファイルを1つずつオープンして、置換して、閉じると思いでしょうが、 -c オプションを使えばファイルをオープン(実際は自動でオープン、クローズされます)しなくても変換が行えるのです。

$ cat test1.txt
AAABBBCCCAAABBBCCC
-c "g/AAA/s//aaa/g"  : ファイル内の文字列"AAA"を全て"aaa"に変換する。
-c "wq" : ファイルを保存して終了する。
$ vim -c "g/AAA/s//aaa/g" -c "wq" test1.txt
$ cat test1.txt
aaaBBBCCCaaaBBBCCC

-S オプションを使えば複数のコマンドをファイルに記述して実行する事も可能です。

$ cat test1.txt
AAABBBCCCAAABBBCCC
$ cat test2.txt
AAABBBCCCAAABBBCCC
replace.vimファイルにコマンドを記述。ファイル内の文字列"AAA"を全て"aaa", "BBB"を"bbb"に変換する。
$ cat replace.vim
bufdo :%s/AAA/aaa/ge | :update
bufdo :%s/BBB/bbb/ge | :update
wq
$ vim -S replace.vim test*.txt
$ cat test1.txt
aaabbbCCCaaabbbCCC
$ cat test2.txt
aaabbbCCCaaabbbCCC
LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください