1.03.2標準
indent.txtの各行は、タブ幅8に相当する先頭空白で字下げされている。
表示位置を保ちながら、変換可能な先頭空白をタブへ置き換える。
GNU coreutilsで適切なコマンドはどれか。
× 不正解
unexpandは空白をタブへ変換し、既定では主に行頭の空白を扱う。expandはタブを空白へ変換する。
詳細解説
誤り
expand -t 8 indent.txtタブを空白へ展開する逆方向の操作である。
誤り。expandはタブを空白へ広げるため、空白をタブへ戻す要求と逆である。
誤り
tr ' ' '\t' < indent.txtすべての空白を1対1でタブへ変え、表示列を保てない。
誤り。8個の空白を8個のタブへ変え、表示幅を大きく変えてしまう。
正しい
unexpand -t 8 indent.txtタブストップ8を基準に、先頭空白をタブへ変換する。
正しい。unexpandは表示列を保つように先頭空白列をタブへ圧縮する。
誤り
cut -c9- indent.txt先頭8文字を削除し、字下げ情報を失う。
誤り。cutは先頭8文字を失わせ、同じ字下げを別表現へ変換する操作ではない。
実際に確かめる
一時的な検証環境で実行できる例です。
printf ' item\n' | unexpand -t 8 | od -An -tx1期待される結果
先頭バイトが09(tab)、続いてitemと改行理解のポイント
- unexpandはspaces→tabs
- expandはtabs→spaces
- -tはtab stops
確認時の注意
- 確認環境: GNU coreutils 9.x / 標準入力
基礎のおさらい
タブストップ
タブは固定個数の空白ではなく、次のタブ位置まで進める制御文字である。
-a
行頭以外を含む変換可能な空白も処理したい場合、unexpand -aを使用できる。
問題IDKL-101-450
確認環境GNU coreutils 9.x / 標準入力
最終技術確認2026-08-13
誤り・権利侵害を報告