連載
» 2016年11月02日 05時00分 UPDATE

Linux基本コマンドTips(61):【 expand 】コマンド/【 unexpand 】コマンド――タブと空白を変換する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、「expand」コマンドと「unexpand」コマンドを解説します。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、タブを空白に変換する「expand」コマンドと、空白をタブに変換する「unexpand」コマンドです。

expandコマンド/unexpandコマンドとは?

 「expand」はタブを空白に変換するコマンド、「unexpand」は空白をタブに変換するコマンドです。デフォルトのタブ幅は8桁で、これを変更したい場合は「-t」オプションでタブの文字数を指定します。


expandコマンド/unexpandコマンドの書式

expand [オプション] [ファイル]

unexpand [オプション] [ファイル]

※[ ]は省略可能な引数を示しています




expandコマンドの主なオプション

 expandコマンドの主なオプションは次の通りです。

短いオプション 長いオプション 意味
-i --initial 非空白類文字の後にあるタブを変換しない
-t 文字数 --tabs=文字数 タブの文字数またはタブ位置のリストを指定する

unexpandコマンドの主なオプション

 unexpandコマンドの主なオプションは次の通りです。

短いオプション 長いオプション 意味
-a --all 行頭以外の空白も変換する
--first-only 最初の空白のみ変換する(「-a」より優先される)
-t 文字数 --tabs=文字数 タブの文字数またはタブ位置のリストを指定する(「-a」が有効になる)


タブを空白に変換する(expandコマンド)

 「expand ファイル」で、ファイル内のタブを空白に変換します。デフォルトのタブ幅は8文字です。

コマンド実行例

expand sampledata.dat

(「sampledata.dat」内のタブを空白に変換する(タブ幅は8文字))(画面1


画面1 画面1 catコマンドの「--show-tabs」オプションでタブの位置を「^I」で表示(赤枠部分)。その後、expandコマンドでタブを空白に置き換えた(青枠部分)


タブの幅を指定する

 タブ幅を変更する場合は、「-t」オプションを使用します。例えば、12文字の幅にしたい場合は「-t 12」と指定します。「タブストップを24と58に指定」のように、タブの位置を指定したい場合は「,」で区切ります。

コマンド実行例

expand -t 12 sampledata.dat

(タブ幅を12に変更する)(画面2の赤枠部分

expand -t 24,58 sampledata.dat

(タブの位置を「24」と「58」に指定する)(画面2の青枠部分


画面2 画面2 デフォルトのタブ幅は8だが、「-t 12」オプションで、タブ幅が「12」になった(赤枠部分)。さらに、「,」でタブの位置を「24」と「58」に指定した(青枠部分)


空白をタブに変換する(unexpandコマンド)

 「unexpand ファイル」で、行頭の空白をタブに変換します。全ての空白を変換対象にする場合は「-a」オプションを、また、タブ幅を変更したい場合は「-t」オプションを使います。

 なお、「-t」オプションを使うと、全ての連続した空白が対象になります。ソースコードなど、行頭だけを変換したい場合は「--first-only」オプションを追加します。

 例えば、「/usr/bin/fgrep」は空白2つでインデントされたシェルスクリプトです。これに対し、「unexpand -t 2 /usr/bin/fgrep」を実行することで、空白2つをタブに置き換えることができます。また、今回の場合はタブに変換したいのは“行頭のみ”なので「--first-only」を追加します。

コマンド実行例

unexpand -t 2 --first-only /usr/bin/fgrep

(空白2つのインデントをタブで空白に置き換える)(画面3


画面3 画面3 「-t 2 --first-only」を指定して、「/usr/bin/fgrep」の行頭の空白2つをタブに変換した


固定長のデータをタブ区切りに変換する/カンマ区切りに変換する

 空白を使って固定長に調整してあるデータでは、unexpandコマンドで空白をタブに変換する場合に、タブの位置を指定するなどの操作が必要になることがあります。

 単に1つ以上の空白をタブに変換するのであれば、本連載で紹介した「tr」コマンド(第52回「trコマンド――テキストファイルの文字を置換する/削除する」)を活用できます。

 この場合は「-s」オプションを使い、連続した空白を1つのタブに置き換えます。「-s」は、変換前の文字列が連続していたら、まとめて1つと見なして置き換えるというオプションです。同様に、空白をカンマ(,)に変換することでCSVデータにもできます。

コマンド実行例

ls -l | tr -s " " "\t"

(「ls -l」の結果をタブ区切りにする)(画面4の赤枠部分)

ls -l | tr -s " " ","

(「ls -l」の結果を「,」区切りにする)(画面4の青枠部分)


画面4 画面4 「ls -l」の結果がtrコマンドでタブ区切り(TSV)に変換された(赤枠部分)/カンマ区切り(CSV)に変換された(青枠部分)


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。