本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、「expand」コマンドと「unexpand」コマンドを解説します。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、タブを空白に変換する「expand」コマンドと、空白をタブに変換する「unexpand」コマンドです。
「expand」はタブを空白に変換するコマンド、「unexpand」は空白をタブに変換するコマンドです。デフォルトのタブ幅は8桁で、これを変更したい場合は「-t」オプションでタブの文字数を指定します。
expandコマンドの主なオプションは次の通りです。
短いオプション | 長いオプション | 意味 |
---|---|---|
-i | --initial | 非空白類文字の後にあるタブを変換しない |
-t 文字数 | --tabs=文字数 | タブの文字数またはタブ位置のリストを指定する |
unexpandコマンドの主なオプションは次の通りです。
短いオプション | 長いオプション | 意味 |
---|---|---|
-a | --all | 行頭以外の空白も変換する |
--first-only | 最初の空白のみ変換する(「-a」より優先される) | |
-t 文字数 | --tabs=文字数 | タブの文字数またはタブ位置のリストを指定する(「-a」が有効になる) |
「expand ファイル」で、ファイル内のタブを空白に変換します。デフォルトのタブ幅は8文字です。
expand sampledata.dat
(「sampledata.dat」内のタブを空白に変換する(タブ幅は8文字))(画面1)
タブ幅を変更する場合は、「-t」オプションを使用します。例えば、12文字の幅にしたい場合は「-t 12」と指定します。「タブストップを24と58に指定」のように、タブの位置を指定したい場合は「,」で区切ります。
expand -t 12 sampledata.dat
(タブ幅を12に変更する)(画面2の赤枠部分)
expand -t 24,58 sampledata.dat
(タブの位置を「24」と「58」に指定する)(画面2の青枠部分)
「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)
空白を使って固定長に調整してあるデータでは、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の青枠部分)
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.