Corredor

ウェブ、プログラミングの勉強メモ。

moreutils の中の便利そうなコマンド : sponge と vidir

moreutils という便利コマンド集があって、Yum とか Homebrew とかで簡単に入れられるので試してみた。今回はその中でも特に有用そうな2つのコマンド、spongevidir を紹介する。

moreutils のインストール方法

moreutils は OS に合わせて以下のようなコマンドでインストールすればよい。今回は MacOS (Homebrew) でインストールしたモノで試した。

# MacOS (Homebrew)
$ brew install moreutils

# CentOS (Yum)
$ yum install -y moreutils

# Ubuntu (apt)
$ apt install -y moreutils

# Windows GitSDK・Archi Linux (Pacman)
$ pacman -S moreutils

sponge

まず紹介するのは sponge コマンド。コレを使うと、入力と出力に同じファイルを利用できる。

例えば、example.txt の内容を読み込み、変換処理を加えて、結果を同じ example.txt に出力したくて、以下のようなコマンドを書いたとする。

$ sed 's/aaa/AAA/g' < example.txt > example.txt

このコマンドを実行すると、example.txt の中身は空になってしまう。まぁ sed に関しては -i オプションで上書き保存はできるのだが、あくまで一例として。

で、リダイレクト > の代わりに、パイプ |sponge コマンドを使うと、上のようなことが思ったとおりに実現できるようになる。

$ sed 's/aaa/AAA/g' < example.txt  | sponge example.txt 

こんな感じ。

vidir

vidir は、Vim っぽい画面でカレントディレクトリ配下のファイルやディレクトリ名をリネーム・削除できるツール。

$ vidir

と叩くと Vim 風な画面が現れ、カレントディレクトリ配下のファイルとディレクトリが見える。ココまでは $ vi ./ と叩いた時と似たように見える。

この状態で編集モードに入ると、ファイル名を書き換えたりでき、それを保存して終了すると実際にファイルがリネームされている。

Vim の矩形選択を覚えれば、複数ファイルの一括リネームが可能になるので、Vim における矩形選択の手順を紹介しよう。

  • 文字を一括で追加する場合
    1. 矩形選択で文字を追加したい箇所にカーソルを移動させておく
    2. Ctrl + v を押下し、「ビジュアル矩形 (Visual Block)」モードに入る
    3. 矩形選択したい行を jk (↑↓) で選択する
    4. Shift + iShift + a で編集モードに入る
    5. この状態で文字を打つと、選択した1行目にのみ変更が反映されていくが、一旦気にせず書く
    6. 追記が終わったら Esc を押す。すると追記した内容が選択していた行全てに反映される
  • 文字を一括で削除する場合
    1. 矩形選択で文字を削除したい箇所にカーソルを移動させておく
    2. Ctrl + v を押下し、「ビジュアル矩形 (Visual Block)」モードに入る
    3. 矩形選択で削除したい範囲 (文字数) を hl (←→) で選択する
    4. 矩形選択で削除する行を jk (↑↓) で選択する
    5. d を押下すると矩形選択した文字が削除される
  • 参考:vimを使った矩形選択 - Qiita

保存時は wq で終了すれば良いし、取り消したければ q! でキャンセルして終了すれば良い。

ディレクトリやファイルの削除にも対応していて、行ごと削除すればファイル削除される。ただし、ディレクトリは中が空でないと削除できない。

以上

シェル芸の幅が広がりそうなので、moreutils 覚えておこう。