複数行の出力を加工して、コマンドに引数として渡すワンライナー
数年前はよくやってたけど、ど忘れしてしまった・・・
https://twitter.com/s\_tsuka/status/1224705159898583042
けど、親切なフレンドが教えてくれました。ありがとう!
https://twitter.com/haya14busa/status/1224709493629628416
完全にそれですわ!ありがとう!
というわけで、忘れない様にここにメモしておきます。
例
[tsukaby@tsukaby tmp]% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a5e9cd9676c nginx:alpine "nginx -g 'daemon of…" 24 minutes ago Up 10 minutes 0.0.0.0:80->80/tcp tmp_nginx_1
9a7dc65d79d8 node:12.13.1-alpine3.10 "docker-entrypoint.s…" 24 minutes ago Up 10 minutes 0.0.0.0:3000->3000/tcp, 0.0.0.0:9229->9229/tcp tmp_node_1
8a0a7303a095 mariadb:10.4.10 "docker-entrypoint.s…" 25 minutes ago Up 11 minutes (healthy) 0.0.0.0:3306->3306/tcp tmp_db_1
これをまとめてkillしたいとする。(-qで出力を簡略化できるけど、それは使えなかったり知らないとする。)
[tsukaby@tsukaby tmp]% docker ps | awk 'NR>1 {print $1}' | xargs docker kill
3a5e9cd9676c
9a7dc65d79d8
8a0a7303a095
ポイント
- 加工はawk
- NR>1で1行目のCONTAINERを消す
- print $1で1列目だけ出力
- xargsでパイプからコマンドに引数を与えて実行
以上です。