ファイルやコマンドの出力結果にヘッダー行がついていると、後続処理にとって邪魔です。ヘッダーを読み飛ばす必要があります。
ヘッダーつきの出力
こういうヘッダー付きの出力を想定します。便宜上 withheader.txt
というファイル名にします。
header
1
2
3
4
5
tail の場合
tail は -n
で行数を指定できます。
tail -n +2 withheader.txt
sed の場合
--expression
(-e
)で最終行を表す $
を使います。 2,$p
で2行目以降から最終行まで表示する(p
)という意味です。
sed --silent --expression '2,$p' withheader.txt
1
2
3
4
5
awk の場合
NR
が行を示すので行番号が1より大きい行について print $1
を実行します。 $1
はフィールドセパレーターで区切られた1列目のことを指します。フィールドセパレーターは -F
や --field-separator
で指定できます。フィールドセパレーターはデフォルトではスペースです。
awk 'NR>1{print $1}' withheader.txt
1
2
3
4
5
ユースケース: すべての Docker コンテナを止める
起動している docker コンテナをすべて止めることを考えます。 docker はストレージ容量をたくさん消費するため、不要なコンテナやイメージは削除することがあります。しかし、コンテナやイメージを削除するには、起動しているコンテナを止めなければなりません。
起動している docker のコンテナ一覧は docker container ls
で確認できます。 ヘッダーがついています。
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e74b29000a27 apache/superset:latest-dev "/app/docker/docker-…" 2 months ago Up 32 seconds (health: starting) 8088/tcp superset_worker
a3a95fbdd855 apache/superset:latest-dev "/app/docker/docker-…" 2 months ago Up 31 seconds 8088/tcp superset_worker_beat
e5f9ba956cc7 apache/superset:latest-dev "/app/docker/docker-…" 2 months ago Up 31 seconds (health: starting) 0.0.0.0:8088->8088/tcp, :::8088->8088/tcp superset_app
4a40a256f74a postgres:10 "docker-entrypoint.s…" 2 months ago Up 31 seconds 5432/tcp superset_db
9e8af44d8e5d redis:latest "docker-entrypoint.s…" 2 months ago Up 32 seconds 6379/tcp superset_cache
bb4c9ffc005b nginx:stable "/docker-entrypoint.…" 8 months ago Restarting (1) 1 second ago nginx-php_nginx_1
8fc19aff9fe3 phpmyadmin/phpmyadmin:fpm-alpine "/docker-entrypoint.…" 8 months ago Up 31 seconds 9000/tcp, 0.0.0.0:8888->80/tcp, :::8888->80/tcp nginx-php_phpmyadmin_1
8cd99dcfce80 mysql:8 "docker-entrypoint.s…" 8 months ago Up 32 seconds 3306/tcp, 33060/tcp nginx-php_db_1
tail を使う場合
docker container ls | cut -f1 -d" " | tail -n +2 | xargs -I {} docker stop {}
sed を使う場合
docker container ls | cut -f1 -d" " | sed --silent --expression '2,$p' | xargs -I {} docker stop {}
awk を使う場合
docker container ls | awk 'NR>1{print $2}' | xargs -I {} docker stop {}