ソート済みファイルのマッチング(commコマンド)
説明
commコマンドは2つの入力ファイルを比較し、3列からなる表を出力する。1列目は1つ目のファイルにのみ
存在する行、2列目は2つ目のファイルにのみ存在する行、3列目は両方のファイルに存在する行を表示する。
またファイルを指定しない、またはファイルに" - "を指定した場合は標準入力から読み込む。

構文
comm  [ オプション ]  ファイル名  [ ファイル名 ]

オプション
-1 1列目の表示をしない。
-2 2列目の表示をしない。
-3 3列目の表示をしない。

a.txtとb.txtを比較します。
$cat a.txt
Turbolinux
debian
linux
redhatlinux
$cat b.txt
Linux
Redhatlinux
Slackware
Turbolinux
$comm a.txt b.txt
        Linux
        Redhatlinux
        Slackware
                Turbolinux
debian
linux
redhatlinux
フィールド、カラムを取り出して表示(cutコマンド)
説明
cutコマンドは指定した行のフィールド(カラム)だけを表示します。

構文
cut [ オプション ] [ ファイル名 ]

オプション
-c 位置 取り出すカラムの位置を指定する。(複数指定可、範囲指定可(例参照))
-f 位置 取り出すフィールドの位置を指定する。(複数指定可、範囲指定可)
-d 区切り文字 フィールドの区切り文字を指定する。
-s 区切り文字がある行だけを出力する。

week.txtの最初の3文字を出力する。
$cat week.txt
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
$cut -c1-3 week.txt
Sun
Mon
Tue
Wed
Thu
Fri
Sat
テキストファイルの比較(diffコマンド)
説明
diffコマンドは2つのテキストファイルの内容を比較し結果を出力する。ファイルに" - "を指定すると
標準入力から読み込む。

構文
diff  [ オプション ]  ファイル名  ファイル名

オプション
-a テキストファイルとして1行ずつ比較する。
-b 空白数の違いを無視する。
-i 大文字、小文字の違いを無視する。
-q ファイルが違うかどうかのみ表示する。
-r ディレクトリの比較の場合、サブディレクトリも再帰的に比較する。

a.txtとb.txtが同じかどうかチェックします。
$diff -q hoge.txt hogehoge.txt
ファイルhoge.txtとhogehoge.txtは違います
テキスト内のタブをスペースに変換(expandコマンド)...
説明
expandコマンドはテキスト内のタブをスペースに変換する。

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

オプション
-i 行頭のタブのみ変換する。
-t スペース数 タブ幅(スペース数)を指定する。(デフォルトは8)

a.txtのタブをスペース数1で変換する。

$cat a.txt
Turbolinux
	debian
		linux
			redhatlinux
$expand -t 1 a.txt
Turbolinux
 debian
  linux
   redhatlinux
テキストフォーマットの変更(fmtコマンド)
説明
fmtコマンドはテキストファイルのフォーマットを変更する。ファイルが指定されていない場合は
標準入力から読み込む。またデフォルトの行幅は75桁である。

構文
fmt  [ オプション ]  [ ファイル名 ]

オプション
-p 文字列 文字列で始まる行のみテキストを整形する。
-s 行の分割のみ行い、結合はしない。
-w 桁数 テキストの行幅を桁数にする。(デフォルトは75桁)

hogehoge.txtを桁数100で表示する。

$cat hogehoge.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
$fmt -w 100 hogehoge.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ファイルから指定した文字列を検索(grepコマンド)
説明
grepコマンドはファイル中から一致した行を表示します。

構文
grep [ オプション ] 正規表現 [ ファイル名 ]

オプション
-c 一致した行の数だけ表示する。
-i 比較のときに大文字と小文字を区別しない。
-n 一致した行の前に行番号を付加する。
-v パターンに一致しなかった行だけを表示する。

car.txtからnsxを検索する。
$grep -i 'nsx' car.txt
Honda NSX
car.txtからTOYOTAで始まる全ての行を表示する。
$grep -i '^toyota' car.txt
TOYOTA センチュリー
TOYOTA エスティマ
toyota プリウス
toyota ソアラ
C言語ソースファイルを見栄えよく変換(indentコマンド)
説明
indentコマンドは入力ソースコードを読みやすく変換したりC言語のスタイル(GNU、K&R、Berkeley)を変換することも可能である。
またファイルを指定しない、またはファイルに" - "を指定した場合は標準入力から読み込む。

構文
indent  [ オプション ]  [ ファイル名 ]

オプション
-bad 宣言部の後に空行をいれる。
-bap 手続き部(関数等)の後に空行を入れる。
-gnu C言語ソースコードをGNUスタイルに変換する。(デフォルト)
-kr C言語ソースコードをKernighan & Ritchieスタイルに変換する。
-o 出力ファイル名 結果を出力するファイルを指定する。
-orig C言語ソースコードをBerkeleyスタイルに変換する。
-st 結果を標準出力に書き出す。
-tsタブ幅 タブ幅(スペース数)を指定する。(デフォルトは8)
hoge.cのソースコードをGNUスタイルに変換し、hoge_gnu.cに出力する。
$indent hoge.c -o hoge_gnu.c
2つのファイルのフィールドが共通な行を結合(joinコマンド)
説明
joinコマンドはソート済みファイルのフィールドが共通の行を結合します。
ファイルを指定しない、またはファイルに" - "を指定した場合は標準入力から読み込む。
またフィールドは1つのスペースで区切られて出力される。

構文
join  [ オプション ]  ファイル名  [ ファイル名 ]

オプション
-1 フィールド番号 1つ目のファイルのフィールド番号目のフィールドで結合する。
-2 フィールド番号 2つ目のファイルのフィールド番号目のフィールドで結合する。
-i 大文字、小文字の違いを無視する。

join1.txtとjoin2.txtを共通の2つ目のフィールドで結合する。
$cat join1.txt
1 a z 
2 b y 
3 c x 
$cat join2.txt
1 a z 
2 e v 
3 f u 
$join -1 2 -2 2 join1.txt join2.txt
a 1 z 1 z
漢字コードを変換し標準出力に出力(nkfコマンド)
説明
nkfコマンドは入力ファイルの漢字コードを自動判定し、漢字コード(JIS、シフトJIS、EUC)に変換する。
ファイルを指定していない場合は標準入力から読み込む。
また結果は標準出力に書き出されるが、リダイレクトを使用することでファイルに書き込みことも可能である。

構文
nkf  [ オプション ]  [ ファイル名 ]

オプション
-e EUCコードで出力する。
-j JISコードで出力する。
-Lm 改行コードを" CR " (MAC)で出力する。
-Lu 改行コードを" LF " (UNIX)で出力する。
-Lw 改行コードを " CR/LF " (Windows)で出力する。
-s シフトJISコードで出力する。
hoge.txtのテキストを漢字コードをシフトJIS、改行コードをCR/LFでhoge_henkan.txtに出力する。
$nkf -s -Lw hoge.txt > hoge_henkan.txt
ファイルに行番号を付加(nlコマンド)
説明
nlコマンドはファイルに行番号を付けて出力する。
ページは3つのセクション(ヘッダ、ボディ、フッタ)からなり、それぞれ別形式の番号付けが可能である。
またデフォルトではボディ部は空行でない行は番号付けされ、ヘッダ部、フッタ部は番号付けしない。
ファイルを指定しない、またはファイルに" - "を指定した場合は標準入力から読み込む。

構文
nl  [ オプション ]  [ ファイル名 ]

オプション
-ba ボディ部のすべての行に番号を付加する。
-bn ボディ部に番号を付加しない。
-bt ボディ部の空行には番号を付加しない。
-bp文字列 ボディ部の文字列と一致した行のみ番号を付加する。
-fa フッタ部のすべての行に番号を付加する。
-fn フッタ部に番号を付加しない。
-ft フッタ部の空行には番号を付加しない。
-fp文字列 フッタ部の文字列と一致した行のみ番号を付加する。
-ha ヘッダ部のすべての行に番号を付加する。
-hn ヘッダ部に番号を付加しない。
-ht ヘッダ部の空行には番号を付加しない。
-hp文字列 ヘッダ部の文字列と一致した行のみ番号を付加する。
-i 増分 行番号の増分を指定する。(デフォルトは1)
-nln 行番号のフォーマットを左詰めにする。
-nrn 行番号のフォーマットを右詰めにする。
-nrz 行番号のフォーマットを右詰め、0埋めにする。
-s 文字列 行番号とテキストの間に文字列を挟む。(デフォルトはタブ文字)
-v 番号 行番号の開始番号を指定する。(デフォルトは1)

a.txtに行番号を付加する。(行番号は右詰め、0埋めで間に" : "文字を挟む)

$cat a.txt
Turbolinux
debian
linux
redhatlinux
$nl -ba -nrz -s : a.txt
000001: Turbolinux
000002: debian
000003: linux
000004: redhatlinux
a.txtに行番号を付加する。(debianという文字列にのみ)
$cat a.txt
Turbolinux
debian
linux
redhatlinux
$nl -bpdebian a.txt
       Turbolinux
     1     debian
       linux
       redhatlinux
指定されたファイルの行を結合(pasteコマンド)...
説明
pasteコマンドは指定されたファイルを行単位で結合する。
ファイルを指定しない、またはファイルに" - "を指定した場合は標準入力から読み込む。
またデフォルトでは行はタブ文字で区切られて出力される。

構文
paste  [ オプション ]  [ ファイル名 … ]

オプション
-d 区切り文字… 行を区切り文字で区切る。また複数指定した場合順番に使用され、繰り返される。

a.txtとb.txtとc.txtを行単位で結合する。(区切り文字は" : "および" ? ")
$cat a.txt
Turbolinux
debian
linux
redhatlinux
$cat b.txt
Linux
Redhatlinux
Slackware
Turbolinux
$cat c.txt
Windows
Windows98
Windows2000
$paste -d :? a.txt b.txt c.txt
Turbolinux:Linux?Windows
debian:Redhatlinux?Windows98
linux:Slackware?Windows2000
redhatlinux:Turbolinux?
テキストファイルを印刷用に整形(prコマンド)
説明
prコマンドは指定されたテキストファイルを印刷用に整形し出力する。
デフォルトでは各ページの先頭に空行2行、日付、ファイル名、ページ番号からなる行、空行2行の5行からなるヘッダ、
空行5行からなるフッタ、およびページの行数は66行である。
ファイルを指定しない、またはファイルに" - "を指定した場合は標準入力から読み込む。

構文
pr  [ オプション ]  [ ファイル名 … ]

オプション
+開始ページ : 終了ページ 開始ページから終了ページまでを出力する。終了ページを省略した場合は最後まで出力する。
-d 行と行の間に空行を挿入する。
-e タブ幅 タブ幅(スペース数)を指定する。
-f ヘッダの最初の空行2行およびフッタの5行が省略される。
-h 名前 ヘッダのファイル名を名前で置き換える。(-h "" で名前を空にできる。)
-l ページの行数 ページの行数を指定する。(デフォルトは66行)
-n ファイルの最初の行から行番号を付加する。
-o インデント幅 各行頭をスペースでインデントする。(デフォルトは0)
-t ヘッダ、フッタの付加、改ページを行わない。(入力ファイルのフォームフィールドは残る。)
-T ヘッダ、フッタの付加、改ページを行わない。(入力ファイルのフォームフィールドも無効。)
-W ページ幅 ページ幅を指定する。ページ幅をはみ出した場合は切り捨てられる。(デフォルトは72桁)

a.txtを印刷用に整形する。(ヘッダの名前を" Linux "にする)
$cat a.txt
Turbolinux
debian
linux
redhatlinux
$pr -h Linux a.txt


2003-07-30 21:31                     Linux                      1 ページ


Turbolinux
debian
linux
redhatlinux

文字コードを変換しファイルそのものを上書き(qkcコマンド)
説明
qkcコマンドは入力ファイルの漢字コードを自動判定し、漢字コード(JIS、シフトJIS、EUC)に変換する。
また結果は変換対象のファイルそのものを上書きする。

構文
qkc  [ オプション ]  ファイル名

オプション
-e EUCコードで出力する。
-j JISコードで出力する。
-m 改行コードを " CR/LF " (Windows)で出力する。
-ma 改行コードを" CR " (MAC)で出力する。
-O nkfのように標準出力に書き出す。
-s シフトJISコードで出力する。
-u 改行コードを" LF " (UNIX)で出力する。
hoge.txtのテキストを漢字コードをシフトJIS、改行コードをCR/LFにする。
$qkc -sm hoge.txt
高度なテキスト処理(sedコマンド)
説明
sedコマンドは文字列の置換、削除、挿入が行えます。

構文
sed [ オプション ] [ コマンド ] [ ファイル名 ]

オプション
-e 次にくるのがコマンドとする。
-f 次にくるのがスクリプトとする。

コマンド
d 行を削除
-s/// それぞれの行で最初に一致した文字列だけ置換(s/パターン/置換文字列/)
-s///g 全体を置換(s/パターン/置換文字列/g)
-s///数値 それぞれの行で指定した数値番目の文字列だけ置換(s/パターン/置換文字列/数値)

week.txtの1から4行目を削除する。
$sed '1,4d' week.txt
Thursday
Friday
Saturday
book.datファイル中の本という文字をbookに置換する。
$sed 's/本/book/g' book.dat
このbookはためになります。なぜならこのbookは…
days.txtの行頭に「私は」を挿入する。
$sed 's/^/私は/g' days.txt
私は今日学校で…
私はそれから…
行の並べ替え(sortコマンド)
説明
sortコマンドはテキストファイルを行単位で並べ替えます。

構文
sort [ オプション ] [ キーの位置指定 ] [ ファイル名 ]

オプション
-b 行頭が空白の場合無視する。
-f 大文字、小文字を区別しない。
-n 数値として並べ替える。
-r 降順に並べ替える。(指定しない場合は昇順)
-t 文字 指定文字を区切り文字とする。(デフォルトは空白)
-u 同一キーであるフィールドが複数存在する場合、1行だけ出力する。
-k 数値1(,数値2) 数値1番目のフィールドから数値2番目のフィールドをキーとする。(先頭フィールドは1)
+数値 数値+1番目のフィールドの最初の文字からキーとする。
-数値 数値-1番目のフィールドの最後の文字までをキーとする。(指定しない場合は行末まで)

test.txtを点数の高い順に並べ替える。
$sort -n -r -k 2,2 test.txt
takeshi 100
hirokazu 95
kenji 89
hiroshi 72
test.txtを名前順に並べ替える。
$sort -k 1,1 test.txt
hirokazu 95
hiroshi 72
kenji 89
takeshi 100
ファイルの分割(splitコマンド)
説明
splitコマンドは入力ファイルを指定サイズに分割しそれぞれを各ファイルに出力する。
またファイルを指定しない、またはファイルに" - "を指定した場合は標準入力から読み込む。
デフォルトではファイルは1000行ごとに分割される。分割されたファイルを結合するにはcatコマンドを使用する。

構文
split  [ オプション ]  [ ファイル名 ]  [ ファイル名 ]

オプション
-行数 分割する行数を指定する。(デフォルトは1000行)
-b バイト数 分割するバイト数を指定する。(" k " : キロバイト、" m " : メガバイトを使用できる。例えば100kなど。)
hoge.txtを10行ごとにout_から始まるファイルに分割する。
$split -10 hoge.txt out_
分割したout_から始まるファイルをketugou.txtに結合する。
$cat out_* > ketugou.txt
文字の変換、削除(trコマンド)
説明
trコマンドは標準入力から読み込んだ文字列を変換および削除する。(リダイレクトを使用することでファイル中の文字列の変換、削除も行える。)

構文
tr  [ オプション ]  文字列1  [ 文字列2 ]

オプション
-d 文字列1を削除する。
-s 文字列1の繰り返しをその文字1文字に変換する。

文字列に指定できるもの
文字の繰り返し 例えば" aaaaa "としたい場合aが5つなので[a*5]と記述できる。
範囲を指定 例えばA-Zとすると英大文字すべてということになる。0-9なら数字すべて。
文字クラス 文字クラスはあらかじめ定義されたある文字の集合である。" [:クラス名:] "で指定する。

文字クラス
alnum 英文字と数字
alpha 英文字
cntrl 制御文字
digit 数字
lower 英小文字
punct 句読点
upper 英大文字

a.htmlを大文字に変換する。(リダイレクトを使用する。)
$cat a.html
<html>
<head><title>tr</title></head>
<body>
tr
</body>
</html>
$tr [:lower:] [:upper:] < a.html
<HTML>
<HEAD><TITLE>TR</TITLE></HEAD>
<BODY>
TR
</BODY>
</HTML>
重複行の削除(uniqコマンド)
説明
uniqコマンドはソート済みファイルの重複行を削除します。

構文
uniq [ オプション ] [ ファイル名 ]

オプション
-c 同一行の数も出力する。
-d 重複行のみ表示する。
-u 重複のない行のみ表示する。

uriage.txtの重複行を1行にまとめ同一行の数も出力する。
$uniq -c uriage.txt
2 いちご
5 みかん
1 めろん
3 りんご
テキストファイルのバイト数、単語数、行数を表示(wcコマンド)
説明
wcコマンドは指定されたテキストファイルのバイト数、スペースで区切られた単語数、行数を表示する。
デフォルトではすべて表示する。またファイルを複数指定した場合は、すべて表示され最後に合計も表示される。
ファイルを指定しない、またはファイルに" - "を指定した場合は標準入力から読み込む。

構文
wc  [ オプション ]  [ ファイル名 … ]

オプション
-c バイト数のみ表示する。
-l 行数のみ表示する。
-w 単語数のみ表示する。
-L ファイル中の最大行長のみ表示する。

a.txt、b.txtのバイト数、単語数、行数を表示する。
$cat a.txt
Turbolinux
debian
linux
redhatlinux
$cat b.txt
Linux
Redhatlinux
Slackware
Turbolinux
$wc a.txt b.txt
      4       4      36 a.txt
      4       4      39 b.txt
      8       8      75 合計