LoginSignup
26
27

More than 5 years have passed since last update.

Bashで小技(パイプ・リダイレクトまわり)

Last updated at Posted at 2016-06-04

Bashで使えるパイプ・リダイレクト関連の小技集。アップデートしていきたいなぁ。

コマンドの出力をdiff

比べたい内容の片方がファイルで、もう片方がコマンド出力の場合は、-引数を使ってコマンド出力を標準入力に流してやればよい。しかし両方がコマンド出力の場合はこのような事はできないので、代わりにプロセス置換(<(...))を使う。これで一時ファイルに格納してやる必要が無くなる。

$ diff <(ps -A) <(ps -e)
238d237
< 31640 pts/1    00:00:00 bash
241d239
< 31643 pts/1    00:00:00 ps

-e-Aが本当に同じか比べるつもりだったが・・・ま、そうなりますよね。

ps + grepでヘッダを表示する

psコマンドの出力を単純にgrepするとヘッダが失われてしまう。

$ ps -e | grep solaar
 2743 ?        00:03:30 solaar

ヘッダも出力するにはグループコマンドを使えばよい。最後の;は必須。

$ ps -e | { head -n 1; grep solaar; }
  PID TTY          TIME CMD
 2743 ?        00:03:30 solaar

grepの代わりにsedを使うというのもアリ。

$ ps -e | sed -e '1p;1d;/solaar/p;d'
  PID TTY          TIME CMD
 2743 ?        00:03:32 solaar

ただ、大抵の場合はps -Cで事足りるかもしれない。

$ ps -C solaar
  PID TTY          TIME CMD
 2743 ?        00:03:32 solaar

ちょっとした文字列を標準入力する

例えばsedは標準入力を受け付けてくれるが、Ctrl-dを押すまでは停止しない。しかし、スクリプトのデバッグ中は結果だけ表示して、さっさと終了して欲しい。かと言って一時ファイルを作るのも面倒くさい。そんな時はヒアストリング(<<<)が使える。

$ sed -e 's/\(..\)\/\(..\)\/\(....\)/\3\/\1\/\2/' <<<06/03/2016
2016/06/03
26
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
27