Linuxのcutコマンドを徹底解説!テキストの列抽出や分割を初心者向けにマスター
生徒
「Linux(リナックス)を使っていて、ログファイルや名簿データの一部だけを取り出したいときはどうすればいいですか?」
先生
「そんなときは、cut(カット)コマンドを使うと便利ですよ。ハサミで切り取るように、テキストの特定の列だけを抽出できるんです。」
生徒
「列を抽出するって、Excel(エクセル)の列選択みたいな感じですか?難しそうに見えますが、bash(バッシュ)やzsh(ズィーシェル)でも動きますか?」
先生
「はい、標準的なシェルであればどこでも動きます。基本さえ覚えれば、初心者の方でもすぐにテキスト処理が得意になりますよ。一緒に詳しく見ていきましょう!」
Linuxを初めて学ぶ人や、 OS・プロセス・メモリ管理・仮想マシン・コンテナの仕組みを図解で理解したい人におすすめの定番書籍です。
試して理解 Linuxのしくみを見る※ Amazonアソシエイト広告リンク
1. cutコマンドとは?
Linux(リナックス)のcutコマンドは、ファイルや標準入力から受け取ったテキストデータの各行から、特定の列や範囲を指定して切り出すためのコマンドです。読み方はcut(カット)といいます。
例えば、カンマ区切りのCSV(シーエスブイ)形式のデータや、スペース区切りのログファイルから、特定の項目(ユーザー名やIPアドレスなど)だけを抜き出したいときに非常に重宝します。UNIX(ユニックス)の初期から存在する伝統的なツールで、軽量かつ高速に動作するのが特徴です。Windows(ウィンドウズ)などのGUI(ジーユーアイ)環境における表計算ソフトで列をコピーする操作を、黒い画面のターミナル上で行うものだと考えると分かりやすいでしょう。
このコマンドは、シェルスクリプト(プログラムのようにコマンドを並べたファイル)の中でもよく使われます。データの整形や加工といった、インフラエンジニアやシステム管理者の日常業務には欠かせない道具の一つです。
2. cutコマンドの基本的な使い方とオプション
cutコマンドを使いこなすには、いくつかの重要なオプションを知っておく必要があります。主に使われるのは、「文字数で切る方法」と「区切り文字で切る方法」の2パターンです。
以下のオプションは、初心者がまず最初に覚えるべき基本中の基本です。
- -c(キャラクター):文字単位で抽出範囲を指定します。読み方はCharacter(キャラクター)といいます。
- -d(デリミタ):区切り文字を指定します。読み方はDelimiter(デリミタ)といいます。デフォルトはタブ文字です。
- -f(フィールド):抽出する列番号を指定します。読み方はField(フィールド)といいます。-dとセットで使います。
それでは、具体的な例を見ていきましょう。まずは単純な文字列から特定の文字を抜き出す方法です。
echo "abcdefg" | cut -c 1-3
abc
この例では、1文字目から3文字目までを抽出しています。非常にシンプルですね。
3. 区切り文字(デリミタ)を使って特定の列を抽出する
実務で最も多く使われるのが、-d(デリミタ)と-f(フィールド)を組み合わせた方法です。例えば、Linuxのシステム利用者情報が格納されている「/etc/passwd(スラッシュ・エトセ・パスワード)」というファイルは、各項目がコロン(:)で区切られています。
ここからユーザー名(1列目)だけを取り出したい場合は、以下のように実行します。
cut -d ":" -f 1 /etc/passwd | head -n 5
root
daemon
bin
sys
sync
このコマンドの意味は、「区切り文字にコロンを指定し、その1番目の列を表示せよ」という命令です。head(ヘッド)コマンドを繋げることで、最初の5行だけを表示させています。もし複数の列を抽出したい場合は、-f 1,3のようにカンマで繋げるか、-f 1-3のようにハイフンで範囲を指定することも可能です。
4. 空白区切りのデータを扱う際の注意点
cutコマンドは、固定長のデータや特定の記号で区切られたデータには強いのですが、「連続するスペース」を一つの区切りとして扱うことが苦手です。ここが初心者がハマりやすいポイントです。
例えば、ls -lコマンドの結果からファイルサイズだけを抜き出そうとしても、空白の数がファイル名によってバラバラだと、cutコマンドではうまく列を指定できません。そのような場合は、事前に空白を整理するか、別のコマンド(awkなど)を検討する必要があります。しかし、スペースが1つだけと決まっている簡単な設定ファイルなどであれば、以下のように対応できます。
echo "2026/03/23 15:00 Login-Success" | cut -d " " -f 2
15:00
このように、半角スペースをダブルクォーテーションで囲って指定することで、2列目の時刻データを取り出すことができます。
5. 文字数やバイト数で指定して抽出する
ログファイルの形式が固定されている「固定長」のデータの場合、文字の位置(何文字目か)を指定して抽出するのが確実です。読み方は、バイト(Byte)単位であれば-bオプションを使いますが、日本語などのマルチバイト文字を扱う場合は、文字単位の-cオプションを使うのが安全です。
以下の例は、日付形式の文字列から「年」の部分だけ、あるいは「月日」の部分だけを取り出す操作です。
echo "20260323" | cut -c 1-4
2026
echo "20260323" | cut -c 5-
0323
5-のように、数字の後にハイフンだけを書くと、「5文字目から最後(末尾)まで全部」という意味になります。逆に-4と書けば、「最初から4文字目まで」という意味になります。直感的で覚えやすい記法ですね。
6. 管理者権限(root)でのコマンド実行例
システム全体の設定ファイルや、アクセス制限がかかっているログファイルを調査する場合、管理者権限であるroot(ルート)ユーザーで実行する必要があります。読み方はroot(ルート)といいます。
例えば、セキュリティに関わる重要なログファイルから、不正アクセスの痕跡を探るために特定の列を抜き出すシーンを想定してみましょう。sudo(スードゥー)コマンドを頭につけて実行するのが一般的です。
cut -d " " -f 1-3 /var/log/auth.log | tail -n 3
Mar 23 15:30:01
Mar 23 15:35:05
Mar 23 15:40:10
このように、システム管理の現場では、膨大なログデータから「いつ」「誰が」といった重要な情報だけをcutコマンドで絞り込み、効率的にチェックを行います。不要な情報を取り除くことで、トラブルの原因究明を早めることができるのです。
7. パイプを利用した実践的なテキスト処理
Linux(リナックス)の真骨頂は、複数のコマンドを「|(パイプ)」で繋ぐことにあります。パイプは、前のコマンドの実行結果を次のコマンドの入力として渡す仕組みです。読み方はPipe(パイプ)といいます。
例えば、「現在実行中のプロセス一覧を表示し、そこからコマンド名だけを抽出して、重複を除外して並び替える」といった複雑な処理も、一行の命令で完結します。cutコマンドはそのチェーンの中核を担うことが多いです。
ps aux | cut -c 66- | sort | uniq | head -n 5
/lib/systemd/systemd
/usr/bin/bash
/usr/bin/python3
/usr/sbin/apache2
/usr/sbin/sshd
一見難しそうに見えますが、一つひとつの動作は単純です。cutで特定の場所を切り出し、sort(ソート)で並べ替え、uniq(ユニーク)で重複を消しているだけです。このようにコマンドを組み合わせることで、あなただけの強力な解析ツールを作ることができます。
8. cutコマンド学習のポイント
ここまで学んできたように、cutコマンドは非常にシンプルな機能に特化しています。しかし、シンプルだからこそ応用範囲が広く、一度マスターすれば一生モノのスキルになります。学習のコツは、いきなり大きなファイルを処理しようとせず、今回紹介したようにechoコマンドで短い文字列を作って、いろいろなオプションを試してみることです。
まずは以下の3点を意識して練習してみましょう。
- カンマやコロンなど、明確な区切り文字がある場合は-dと-fを使う。
- 文字の位置が決まっている場合は-cを使う。
- 結果が思い通りにいかないときは、データの間にタブやスペースが混ざっていないか確認する。
Linuxの世界には、cutの他にもsed(セド)やawk(オーク)といった強力なテキスト処理コマンドがありますが、まずは最も手軽で分かりやすいcutコマンドから始めるのが、脱初心者への近道です。ぜひ今日から、ターミナルを開いて実際に手を動かしてみてください!
LPICレベル1の合格を目指している人や、 Linuxコマンド・シェル・ネットワーク・セキュリティの試験対策を効率よく進めたい人におすすめの定番問題集です。
Linux教科書 LPICレベル1 スピードマスター問題集を見る※ Amazonアソシエイト広告リンク
まとめ
Linux(リナックス)のコマンドライン操作において、テキストデータの加工や抽出は避けて通れない重要な作業です。今回詳しく解説したcut(カット)コマンドは、その中でも最もシンプルで、かつ強力な「切り出し」ツールです。
cutコマンドの主要なポイントを再確認
これまでの内容を整理すると、cutコマンドを使いこなすための鍵は「データの構造を正しく把握すること」にあります。ログファイルや設定ファイルがどのような形式で保存されているかによって、最適なオプションを使い分ける必要があります。
- 区切り文字(デリミタ)が明確な場合:CSV(シーエスブイ)や/etc/passwd(スラッシュ・エトセ・パスワード)のように、カンマやコロンで区切られているデータには、
-dオプションで区切り文字を指定し、-fオプションで何番目の列を取り出すか指定します。 - データの位置(文字数)が固定されている場合:日付データや特定のログ形式のように、文字の位置が常に一定であれば、
-cオプションを使って文字数指定で抽出するのが最も確実です。 - パイプ(|)との組み合わせ:Linuxの醍醐味であるパイプライン処理において、cutコマンドはデータの「絞り込み」を担う中心的な存在です。他のコマンド(sortやuniqなど)へ渡す前に、不要な情報を削ぎ落とす役割を果たします。
実践的なサンプルコードで理解を深める
ここでは、学んだ内容を応用して、複数の列を同時に抽出したり、特定の範囲を切り出したりする実践的なシェルスクリプトの例を紹介します。例えば、ユーザー情報の一覧から「ユーザー名」と「使用しているシェル」の2項目だけを抜き出し、見やすく整形するようなケースです。
#!/bin/bash
# ユーザー名(1列目)とログインシェル(7列目)を抽出して表示する
# 区切り文字はコロン(:)を指定
echo "--- ユーザー名とシェルの抽出結果 ---"
cut -d ":" -f 1,7 /etc/passwd | head -n 10
上記のコードでは、-f 1,7と指定することで、1列目と7列目を同時に取得しています。このように、カンマ区切りで複数のフィールド番号を指定できる点は非常に便利です。また、連続した範囲を取得したい場合は、-f 1-4のようにハイフンを使うことで、1番目から4番目までの列をまとめて抽出できます。
初心者が注意すべき限界と対策
cutコマンドは非常に高速で便利ですが、万能ではありません。特に、「連続する空白(スペース)」を一つの区切りとして扱えないという弱点があります。多くのLinuxコマンド(例えば ps や ls)の出力結果は、列の間が複数のスペースで調整されているため、単純に cut -d " " -f 2 としても意図した結果が得られないことが多いです。
このような場合は、以下のように tr コマンドを使って連続するスペースを一つのスペースに圧縮してから cut に渡すか、より高度な awk コマンドを検討するのが一般的です。
# スペースが連続する出力を整形して2列目を取り出す例
echo "Item1 Item2 Item3" | tr -s " " | cut -d " " -f 2
Item2
このように、他のコマンドの特性を知ることで、cutコマンドの活用範囲はさらに広がります。テキスト処理の基本として、まずはこのcutコマンドを自由自在に操れるようになりましょう。インフラ構築やプログラミング、データ分析など、あらゆる場面であなたの助けになってくれるはずです。
生徒
「先生、ありがとうございました!cutコマンドって、思っていたよりもずっとシンプルで使いやすいですね。特に -d と -f の組み合わせは、CSVファイルなどのデータを扱うときにすごく重宝しそうです。」
先生
「その通りです。シンプルだからこそ、動作が速くて正確なんです。大きなデータファイルを扱うときほど、その真価を発揮しますよ。ちなみに、-c オプションの方は試してみましたか?」
生徒
「はい! -c 1-4 みたいに書くと、文字列の最初の方だけをサッと取り出せて便利でした。ログの日付部分だけを見たいときなんかに使えそうですね。でも、さっき先生が言っていた『スペースが連続しているとうまくいかない』っていうのは少し驚きました。」
先生
「そうですね、そこがcutコマンドの一番の注意点なんです。cutはあくまで『指定した1文字』を区切りとして認識するので、空白が2つ並んでいると、そこを空の列として数えてしまうんですよ。」
生徒
「なるほど。だから tr -s でスペースを一つにまとめたり、あるいは awk を使ったりする必要があるんですね。勉強になります!まずはcutでできる範囲をしっかり覚えて、確実にデータを抜き出せるように練習してみます。」
先生
「素晴らしい意気込みですね。コマンド操作は、実際に何度も入力して結果を確認するのが一番の上達方法です。まずは自分のホームディレクトリにある隠しファイルや、簡単なテキストファイルを使って、いろいろな切り出し方を試してみてください。次は、もっと複雑な条件で抽出できる grep や sed についても学んでいきましょう!」
生徒
「はい!ありがとうございます!リナックスの黒い画面が少しずつ怖くなくなって、むしろパズルのようで楽しくなってきました!」