moreutils とは
Unix 初期の時代には誰も書こうとは考えなかった、日々拡大を続ける Unix ツール集
この投稿の趣旨
moreutils は便利なのにあまり知られていないので、知名度を上げるためにまとめました。
moreutils が提供するコマンドは数多くありますが、その中で特に私自身が便利だと思うものを使い方とともに紹介します。
chronic
下記を
$ backup >/dev/null 2>&1
下記のように
$ chronic backup
と書くことができる。
>/dev/null 2>&1
の順番を覚えるのが大変なので、便利。
combine
2つのファイル中の行を論理演算して出力できる。
(例)
$ cat lang.txt
Ruby
Perl
Python
PHP
$ cat gemstones.txt
Ruby
Peridot
Sapphire
Opal
Topaz
$ combine lang.txt and gemstones.txt
Ruby
$ combine lang.txt not gemstones.txt
Perl
Python
PHP
$ combine gemstones.txt not lang.txt
Peridot
Sapphire
Opal
Topaz
ifdata
ifconfig や ip a を文字列処理しなくても、ネットワークのいろんなデータを取得可能
$ ifdata -pa lo
127.0.0.1
ifne
標準入力が空でないとき、後続の処理を実行する。
man ページに掲載されていた例(core があれば root にメールする)
find . -name core | ifne mail -s "Core files found" root
isutf8
引数のファイルが UTF8 かどうかを判定する。
$ isutf8 README.md && echo UTF-8
UTF-8
Sponge
標準入力をすべて受け取ってから、引数のファイルに書き出す。
(例)
$ cat lang.txt
Ruby
Perl
Python
PHP
$ egrep ^P lang.txt > lang.txt
grep: 入力ファイル `lang.txt' が出力にもなっています
$ egrep ^P lang.txt | sponge lang.txt
$ cat lang.txt
Perl
Python
PHP
vidir
テキストエディタを使って、カレントディレクトリを編集できる。
ファイル名を一括置換するときや、一部のファイルを削除したいときなどに便利。
$ vidir
$ find -type f | vidir
vipe
パイプの途中にテキストエディタを利用できる。
例として、DB のダンプ内容を加工して、リストアするときは下記のようにしたりできる。
$ mysqldump --host=srchost -uroot -p srcdb | vipe | mysql --host=dsthost -uroot -p dstdb
参考文献
- https://joeyh.name/code/moreutils/
- http://stackoverflow.com/questions/10686183/pipe-vim-buffer-to-stdout
- http://stackoverflow.com/questions/3219479/how-to-write-buffer-content-to-stdout
- https://packages.debian.org/ja/sid/moreutils
- http://unix.stackexchange.com/questions/207919/sponge-from-moreutils-whats-the-difference-to-shell-redirect-useful-examples
- http://devblog.nestoria.com/post/110168998173/moreutils-basic-unix-tools-that-ought-to-be