この記事はLinuC Level1 副主題1.03.2「フィルタを使ったテキストストリームの処理」に対応した要点解説です。試験で問われる範囲に絞り、テキスト処理コマンドの用途・オプション・弁別ポイントを整理しました。
📚 LinuC Level1 完全攻略マップ(全39サブ項目)へ戻る
目次
- この記事でできるようになること
- 表示系:
cat/head/tail/less/more - 集計・番号付け:
wc/nl/cat -n/cat -b - バイナリダンプ:
od - 並べ替えと重複除去:
sort/uniq - 切り出しと結合:
cut/paste/join - 分割:
split - 文字変換:
tr/sed - 整形:
pr/fmt/expand/unexpand - よくある質問(FAQ)
- まとめ
- 模擬問題にチャレンジ(ランダム出題)
1. この記事でできるようになること
- ✅
head/tailの-n/-c/-fとデフォルト行数 - ✅
cat/less/moreの表示動作の違い - ✅
wcの-l/-w/-c/-mとデフォルト出力 - ✅
nl -b a/-b t、cat -n/cat -bの空行の扱い - ✅
odの-o/-x/-b/-c/-t c - ✅
sort -k -n/-u、uniqの出力ファイル指定 - ✅
cut -d -f/-c/-b、paste -d、join - ✅
split -lのデフォルト1000行と接頭辞xaa/xab - ✅
trの文字クラス([:lower:]/[:upper:]/[:alpha:]/[:digit:]/[:alnum:]/[:space:]) - ✅
trの-d(削除)/-s(圧縮)/ファイル直接指定不可 - ✅
pr -l/-h/+m:n、fmt -w - ✅
expand -t/-i、unexpand -a
2. 表示系:cat / head / tail / less / more
| コマンド | 動作 |
|---|---|
cat |
ファイル内容を一度に全て標準出力へ出力(編集不可) |
head |
ファイルの先頭を表示(デフォルト10行) |
tail |
ファイルの末尾を表示(デフォルト10行) |
less |
ページャ。1画面ずつ表示、双方向スクロール可能(編集不可) |
more |
ページャ。1画面ずつ表示(lessの旧版、編集不可) |
2-1. head / tail の行数・バイト数指定
| 書式 | 意味 |
|---|---|
head -n 5 file |
先頭5行(-n Nで行数指定) |
head -5 file |
先頭5行(-n省略可、数値のみ) |
head --lines=5 file |
先頭5行(ロングオプション) |
head file |
先頭10行(デフォルト) |
head -c 500 file |
先頭500バイト(-c Nでバイト数指定) |
tail -n 5 file |
末尾5行(-n/-5/--lines=5も同等) |
tail -f file |
末尾をリアルタイム監視(-f=follow、Ctrl+Cで終了) |
tail -f -n 5 /var/log/messagesのように-fと-nを併用すると、初期表示を5行にしてから追記監視に入ります。ログ監視の定番形です。
2-2. cat/less/moreの使い分け
catはファイル内容を一度に全て出力して終了します。長いファイルでは画面を流れてしまうため、1画面ずつ確認したい場合はページャ(less/more)を使います。どちらも編集はできません。vi/nanoは編集可能なエディタなので分類が違います。
3. 集計・番号付け:wc / nl / cat -n / cat -b
3-1. wc(行・単語・文字数のカウント)
| 書式 | 出力内容 |
|---|---|
wc file |
行数・単語数・バイト数・ファイル名(デフォルトで3つすべて) |
wc -l file |
行数のみ(lines) |
wc -w file |
単語数のみ(words、空白区切り) |
wc -c file |
バイト数のみ(chars/bytes) |
wc -m file |
文字数のみ(マルチバイト考慮) |
wc -lwc file |
行・単語・バイトを明示指定(wc fileと同じ結果) |
3-2. 行番号付け:nl と cat -n / cat -b の違い
空行の扱いで動作が分かれます。試験頻出。
| 書式 | 空行への付番 | 備考 |
|---|---|---|
cat -n file |
する(全行に番号) | — |
cat -b file |
しない(空行除く) | — |
nl file(デフォルト) |
しない(-b t相当) |
t=text(本文のみ) |
nl -b a file |
する(全行に番号) | a=all |
nl -b t file |
しない(空行除く) | デフォルトと同じ |
・空行含めて全行に付番:
cat -n / nl -b a・空行除いて付番:
cat -b / nl(デフォルト)/ nl -b t
4. バイナリダンプ:od
od(octal dump)はバイナリファイルを指定した表現形式で表示します。デフォルトは8進数です。
| オプション | 表示形式 |
|---|---|
| なし(デフォルト) | 8進数表示 |
-o |
8進数(デフォルトと同義) |
-b |
1バイトごとの8進数 |
-x |
16進数 |
-d |
10進数 |
-c |
ASCII文字(非印字はエスケープ\n/\t/\0等) |
-t c |
type指定でchar=-cと同等 |
5. 並べ替えと重複除去:sort / uniq
5-1. sortの主要オプション
| オプション | 意味 |
|---|---|
| なし | 辞書順ソート(10は2より前に並ぶ) |
-n |
数値としてソート |
-r |
逆順(降順) |
-k N |
N列目を基準にソート |
-t X |
フィールド区切り文字をXに指定 |
-u |
重複行を除去(sortしつつuniq) |
-f |
大文字小文字を区別しない |
sort -k 2 -n fileのように-kと-nを組み合わせると「2列目を数値として昇順」になります。-nを付け忘れると辞書順になり、10が2より前に並ぶので注意。sort FileA FileBのように複数ファイルを渡すと合わせて並べ替えます。
5-2. uniqの動作と注意点
uniqは連続して重複した行だけを1行にまとめます。そのため、ファイル全体の重複除去には事前にsortを通す必要があります。
| 書式 | 意味 |
|---|---|
uniq file |
連続重複を1行にまとめて標準出力 |
uniq file newfile |
結果をnewfileに出力(第2引数が出力先) |
uniq file > newfile |
リダイレクトで出力(上記と同等の結果) |
uniq -c |
件数付きで表示 |
uniq -d |
重複行のみ表示 |
uniq -u |
一度しか現れない行のみ表示 |
uniqの第2引数uniq file1 file2は「file1とfile2を合わせて処理」ではなく、file1を入力、file2を出力先として扱います。珍しい仕様なので頻出です。通常のリダイレクト>でも同じ結果になります。
# 2ファイルを合わせて並べ替え、重複を除いてListに追記
$ sort FileA FileB | uniq >> List
$ sort -u FileA FileB >> List # -u で同じ結果
6. 切り出しと結合:cut / paste / join
6-1. cut(フィールド・文字の切り出し)
| オプション | 意味 |
|---|---|
-d X |
区切り文字をXに指定(デフォルトはタブ) |
-f N |
N番目のフィールドを抽出(1,7/1-7も可) |
-c N |
N番目の文字を抽出(区切り文字不要) |
-b N |
N番目のバイトを抽出(ASCIIなら-cと同じ結果) |
# /etc/passwd のユーザ名(1)とログインシェル(7)
$ cut -d : -f 1,7 /etc/passwd
# 各行の2番目の文字
$ cut -c 2 /etc/passwd
6-2. paste(横方向の連結)
pasteは複数ファイルの同じ行番号同士を横に連結します。区切り文字はデフォルトでタブ、-dで変更できます。
# タブ区切りで横連結
$ paste file1 file2
# 区切り文字をコロンに
$ paste -d : file1 file2
catは複数ファイルを縦に連結(下に追加)するので、用途が異なります。
6-3. join(共通キーで結合)
joinは2つのファイルで共通するフィールド(キー)が一致する行を結合します(DBのINNER JOIN相当)。両ファイルがそのキーでソート済みである必要があります。
# コロン区切りでキー結合
$ join -t : users.txt shells.txt
7. 分割:split
splitは指定行数(または指定バイト数)でファイルを分割します。
| 書式 | 動作 |
|---|---|
split file |
デフォルトで1000行ごとに分割、出力名はxaa/xab… |
split -l N file [prefix] |
N行ごとに分割。接頭辞を指定するとprefixaa/prefixab… |
split -b N file [prefix] |
Nバイトごとに分割 |
# 500行ごとに分割、出力名は hogeaa/hogeab/...
$ split -l 500 file hoge
8. 文字変換:tr / sed
8-1. trの基本動作
tr(translate)は1文字単位の変換・削除・連続圧縮を行います。ファイルを直接引数にできないため、必ずリダイレクト(<)またはパイプで入力を渡します。
| 書式 | 意味 |
|---|---|
tr SET1 SET2 |
SET1の各文字をSET2の対応文字に変換 |
tr -d SET1 |
SET1の文字を削除 |
tr -s SET1 |
SET1の連続文字を1文字に圧縮 |
tr -c SET1 SET2 |
SET1の補集合を対象にする |
8-2. trの文字クラス
| 文字クラス | 意味 |
|---|---|
[:lower:] |
英小文字 a-z |
[:upper:] |
英大文字 A-Z |
[:alpha:] |
英字 a-zA-Z(英大小文字両方) |
[:digit:] |
数字 0-9 |
[:alnum:] |
英数字 a-zA-Z0-9 |
[:space:] |
空白全般(スペース・タブ・改行・CR・フォームフィード等) |
[:blank:] |
スペースとタブのみ([:space:]より狭い) |
# 英小文字を英大文字に(4通りすべて同じ結果)
$ tr 'a-z' 'A-Z' < /etc/hosts
$ tr '[:lower:]' '[:upper:]' < /etc/hosts
$ cat /etc/hosts | tr a-z A-Z
$ cat /etc/hosts | tr [:lower:] [:upper:]
# 文字を削除(SET1に複数文字を並べる。-d -d の複数指定は不可)
$ tr -d 'ac' < file
# スペースの連続を1つに圧縮
$ tr -s ' ' < file
# 変換した結果をファイルに保存
$ tr 'PINGT' 'pingt' < file.txt > hoge.txt
trはファイル直接指定不可tr 'a' 'b' fileやtr 'a' 'b' file1 file2はエラーになります。入力は< fileまたはcat file |で渡し、出力は> newfileで保存します。
8-3. sed(パターン置換)
sedは行単位・パターン単位の置換を行います。こちらはファイルを直接引数にできます。
# 置換(g=行内すべて、g無しは各行の最初の1箇所のみ)
$ sed 's/PINGT/pingt/g' file.txt
# 特定の文字を削除
$ sed 's/[ac]//g' file
9. 整形:pr / fmt / expand / unexpand
9-1. pr(印刷用整形)
prはヘッダ(日付・ファイル名・ページ番号)を付けて印刷用ページに整形します。
| オプション/書式 | 意味 |
|---|---|
-l N |
1ページあたりの行数(デフォルト66) |
-h 文字列 |
ヘッダのファイル名部分を差し替え |
+m:n |
ページ範囲をコロン区切りで指定(+1:2で1〜2ページ目) |
-t |
ヘッダ/フッタを抑制(-hと間違えやすい) |
# 1ページ30行
$ pr -l 30 httpd.conf
# ヘッダ名を「testfile」に差し替えて1ページ30行
$ pr -h testfile -l 30 httpd.conf
# 1ページ30行で、1ページ目から2ページ目までを表示
$ pr -l 30 +1:2 httpd.conf
prのページ範囲指定ページ範囲は
+開始:終了の形式で、区切りはコロン。ハイフンやカンマ、--pageのようなロングオプションは存在しません。
9-2. fmt(幅指定の折り返し)
fmtは段落テキストを指定幅で折り返します。1行あたりの最大文字数を指定するコマンドと問われたらfmtです(prの-lは行数なので混同しないこと)。
| オプション | 意味 |
|---|---|
-w N |
1行の最大幅(デフォルト75程度) |
# 1行30文字に整形
$ fmt -w 30 httpd.conf
9-3. expand(タブ→スペース)/unexpand(スペース→タブ)
| 書式 | 意味 |
|---|---|
expand -t N file |
タブをN個のスペースに変換(-t 1でタブ→スペース1つ) |
expand -i -t N file |
行頭のタブのみ変換(-i=initial) |
unexpand file |
スペースをタブに変換(行頭のみが対象、デフォルト) |
unexpand -a -t N file |
行頭以外も含めて変換(-a=all、--allも同じ) |
・
expand:デフォルトで行頭/行中すべてのタブを変換。行頭のみに限定するなら-i。・
unexpand:デフォルトで行頭のみ変換。行頭以外も対象にするなら-a。
10. よくある質問(FAQ)
Q. head fileとオプション無しで叩くと何行出る?
デフォルト10行です。tailも同じくデフォルト10行。5行にしたい場合は-n 5/-5/--lines=5のいずれか。
Q. head -c 5とhead -n 5の違いは?
-cはバイト数(5バイト)、-nは行数(5行)。用途がまったく異なります。
Q. cat -nとnlはどう違う?
空行の扱いが違います。cat -nは全行に番号を付けますが、nlはデフォルト(-b t)で空行を除いて付番。nl -b aにすると空行も含めます。cat -bはnlデフォルトと同じく空行を除いて付番します。
Q. sortに-nを付けないとどうなる?
辞書順(文字列として比較)になります。10/2/9を並べると10, 2, 9の順。数値として正しく並べるには-nを付けて2, 9, 10に。
Q. uniqが重複を除去してくれない
uniqは連続した重複しか見ません。散在する重複を除きたい場合はsortでまとめてからuniqに通すか、sort -uで一発処理します。
Q. trでtr 'a' 'b' fileと書くとエラーになるのはなぜ?
trはファイルを引数として受け取らない設計です。入力はリダイレクト(tr 'a' 'b' < file)かパイプ(cat file | tr 'a' 'b')で渡します。
Q. tr -d 'a' -d 'c'は使える?
使えません。-dは複数指定できないので、tr -d 'ac'のようにSET1に削除したい文字をまとめて並べます。
Q. splitをオプション無しで叩くと何行ずつ?
1000行ごとに分割され、出力ファイル名はデフォルトでxaa/xab…になります。接頭辞を指定すればprefixaa/prefixab…に変わります。
11. まとめ
- 表示:
head/tail(デフォルト10行、-n行数、-cバイト、-f監視)/cat(一度に全出力)/less/more(ページャ) - カウント:
wc(無指定で行・単語・バイト)/-l行/-w単語/-cバイト/-m文字 - 行番号:全行→
cat -n/nl -b a、空行除く→cat -b/nl/nl -b t - バイナリ:
od(デフォルト8進、-x16進、-c/-t cASCII) - ソート:
sort -k N -n(列+数値)/-u重複除去/複数ファイル合成可 - 重複除去:
uniqは連続重複のみ、出力先を第2引数にも指定可 - 切り出し:
cut -d 区切り -f 列/-c文字位置/-bバイト位置 - 結合:
paste(横連結、-d区切り)/join(キー一致、両者ソート済み必須) - 分割:
split(デフォルト1000行、xaa命名、-l行数/-bバイト) - 変換:
tr(1文字単位、ファイル直接指定不可)/文字クラス[:lower:]〜[:space:]/-d削除/-s圧縮 - 整形:
pr -l行数/-hヘッダ/+m:nページ範囲(コロン)、fmt -w幅、expand -t/-i、unexpand -a
📚 次の副主題:ストリーム・パイプ・リダイレクトの使用(LinuC 1.03.3)
12. 模擬問題にチャレンジ(ランダム出題)
ここまでの内容を本試験に近い形で確認できます。問題数を選んで「出題スタート」を押すと、主題1.03.2の問題プールからランダムに出題されます。選択肢をクリック/タップすると、正誤と解説がその場で表示されます。
合格ライン目安:75%以上。もっと幅広く解きたい場合はLinuC 模擬問題ポータルから他の分野にも挑戦できます。
おすすめの教材
【ウズカレ式】1週間でLinuxの基本操作と管理・運用スキルが学べる講座
累計80,000人以上受講。LinuC Level1を1週間で網羅。テキスト処理コマンドもカバー。
関連記事
📚 LinuC Level1 完全攻略マップへ戻る
全39サブ項目のシラバス準拠マップから他の記事を探せます
- 前の主題:コマンドラインの操作(LinuC 1.03.1)
- 次の主題:ストリーム・パイプ・リダイレクトの使用(LinuC 1.03.3)




コメント