Linuxでログや設定ファイルを確認するとき「ファイルを1行ずつゆっくり見たい」「長いリストを1行ずつ確実に表示したい」「行番号付きで内容を確認したい」と思う場面があります。
こんな場面で必要になります
- 設定ファイルを行番号付きで確認したい
- ログファイルを詳しく分析したい
- プログラムの実行結果を丁寧にチェックしたい
- 大量のデータを見落としなく確認したい
- シェルスクリプトで配列を1行ずつ処理したい
そのままcat
で表示すると一気に画面に流れてしまい、肝心の部分が見逃しやすいですよね。
この記事では、Linuxでファイルや文字列を1行ずつ表示する方法を初心者にもわかりやすく解説します。基本的なcat
やless
から、行番号付きのnl
、さらにシェルスクリプトでの活用法まで詳しく紹介します。
これを読めば、データの確認作業がずっと効率的になりますよ!
基本的なファイル表示方法
catコマンドでシンプルに表示
基本的な使い方
cat filename.txt
cat
コマンドはファイルの内容をそのまま1行ずつ順に表示します。シンプルで高速ですが、行数が多いと一気に流れてしまいます。
実行例
$ cat sample.txt
This is line 1
This is line 2
This is line 3
This is line 4
catの特徴
- 高速表示:大きなファイルでも素早く処理
- パイプ処理:他のコマンドとの組み合わせが容易
- リダイレクト対応:出力を別ファイルに保存可能
短いファイル向け
- 設定ファイルの簡単な確認
- 数行程度のテキストファイル
- パイプ処理での中間データ確認
catの便利なオプション
行番号付きで表示(-n)
cat -n filename.txt
出力例
1 This is line 1
2 This is line 2
3 This is line 3
4 This is line 4
空行以外に行番号(-b)
cat -b filename.txt
タブを可視化(-T)
cat -T filename.txt
# タブが^Iで表示される
改行を可視化(-E)
cat -E filename.txt
# 行末が$で表示される
すべての制御文字を表示(-A)
cat -A filename.txt
# -vET と同じ(すべての制御文字が可視化)
lessコマンドで1行ずつスクロール確認
lessの基本的な使い方
ファイルを開く
less filename.txt
less
を使うと、上下キーやEnterキーで1行ずつスクロールして内容を確認できます。大きなファイルでも快適に閲覧できます。
lessの操作方法
基本的な移動
- ↓ または j:1行下へ
- ↑ または k:1行上へ
- Enter:1行下へ
- Space:1ページ下へ
- b:1ページ上へ
ジャンプ操作
- g:ファイルの先頭へ
- G:ファイルの末尾へ
- 数字 + G:指定行へジャンプ(例:100G で100行目)
検索機能
- /:前方検索(例:/error)
- ?:後方検索
- n:次の検索結果
- N:前の検索結果
その他の便利な操作
- q:終了
- h:ヘルプ表示
- F:tail -f のようにリアルタイム表示
- Ctrl + C:リアルタイム表示の停止
lessの便利なオプション
行番号を表示
less -N filename.txt
大文字小文字を無視して検索
less -i filename.txt
長い行を折り返さない
less -S filename.txt
複数ファイルを開く
less file1.txt file2.txt
# :n で次のファイル、:p で前のファイル
moreコマンドも使える
moreの基本
more
はless
の前身となるコマンドです。基本的な機能は似ていますが、less
の方が高機能です。
more filename.txt
moreの操作
- Space:次のページ
- Enter:1行下へ
- q:終了
- /:検索
lessとの違い
- 後方移動ができない(上に戻れない)
- 機能が限定的
- 軽量で高速
nlコマンドで行番号付き表示
nlの基本的な使い方
基本構文
nl filename.txt
nl
コマンドはファイルを1行ずつ番号付きで表示します。cat -n
と似ていますが、より柔軟な番号付けができます。
実行例
$ nl sample.txt
1 This is line 1
2 This is line 2
3 This is line 3
4 This is line 4
nlの詳細オプション
番号の書式を変更
# 左詰めで番号表示
nl -nln filename.txt
# 右詰めで番号表示(デフォルト)
nl -nrn filename.txt
# ゼロ埋めで番号表示
nl -nrz filename.txt
番号付け範囲の指定
# すべての行に番号(空行含む)
nl -ba filename.txt
# 空行以外に番号(デフォルト)
nl -bt filename.txt
# 特定のパターンにマッチする行のみ
nl -bp"^[Ee]rror" filename.txt
開始番号を指定
# 100から開始
nl -v100 filename.txt
番号の増分を指定
# 5ずつ増加
nl -i5 filename.txt
headとtailで部分表示
headで先頭部分を表示
先頭10行を表示(デフォルト)
head filename.txt
先頭5行を表示
head -n 5 filename.txt
# または
head -5 filename.txt
先頭から指定バイト数を表示
head -c 100 filename.txt
tailで末尾部分を表示
末尾10行を表示(デフォルト)
tail filename.txt
末尾5行を表示
tail -n 5 filename.txt
# または
tail -5 filename.txt
リアルタイムで新しい行を表示
tail -f /var/log/messages
複数ファイルをリアルタイム監視
tail -f /var/log/access.log /var/log/error.log
シェルスクリプトでの1行ずつ処理
配列を1行ずつ表示
基本的な配列の1行ずつ表示
#!/bin/bash
array=("apple" "banana" "cherry" "date")
for item in "${array[@]}"; do
echo "$item"
done
出力例
apple
banana
cherry
date
ファイルを1行ずつ読み込み
whileループでファイルを1行ずつ処理
#!/bin/bash
while IFS= read -r line; do
echo "処理中: $line"
done < filename.txt
ファイルの各行に番号を付けて処理
#!/bin/bash
line_number=1
while IFS= read -r line; do
echo "$line_number: $line"
((line_number++))
done < filename.txt
文字列を1行ずつ分割
文字列を改行で分割して1行ずつ表示
#!/bin/bash
text="line1
line2
line3"
echo "$text" | while IFS= read -r line; do
echo "行: $line"
done
区切り文字を指定して分割
#!/bin/bash
text="apple,banana,cherry,date"
IFS=',' read -ra array <<< "$text"
for item in "${array[@]}"; do
echo "$item"
done
パイプを使った1行ずつ処理
基本的なパイプ処理
コマンドの出力を1行ずつ処理
ls -la | while read -r line; do
echo "ファイル情報: $line"
done
grepの結果を1行ずつ処理
grep "error" /var/log/messages | while read -r line; do
echo "エラー発見: $line"
done
sedやawkとの組み合わせ
sedで加工してから1行ずつ表示
cat filename.txt | sed 's/old/new/g' | nl
awkで特定の列を抽出して1行ずつ表示
ps aux | awk '{print $2, $11}' | while read -r pid cmd; do
echo "PID: $pid, コマンド: $cmd"
done
実用的な活用例
ログファイルの分析
エラーログを1行ずつ詳しく確認
# エラーログを行番号付きで表示
nl /var/log/error.log | less
# 特定の時間帯のログを1行ずつ確認
grep "2024-01-15 14:" /var/log/access.log | nl
リアルタイムログ監視
# 複数のログファイルを同時監視
tail -f /var/log/{access.log,error.log,debug.log}
設定ファイルの確認
設定ファイルを行番号付きで確認
# nginx設定ファイルをチェック
nl /etc/nginx/nginx.conf | less
# 特定の設定項目を検索
nl /etc/nginx/nginx.conf | grep -i "server"
データ処理
CSVファイルを1行ずつ処理
#!/bin/bash
while IFS=',' read -r col1 col2 col3; do
echo "名前: $col1, 年齢: $col2, 職業: $col3"
done < data.csv
大量のURLを1行ずつ処理
#!/bin/bash
while read -r url; do
echo "チェック中: $url"
curl -I "$url" > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "OK: $url"
else
echo "NG: $url"
fi
done < urls.txt
パフォーマンスと使い分け
コマンド別の特徴比較
コマンド | 用途 | メリット | デメリット |
---|---|---|---|
cat | 高速表示 | 高速、シンプル | 大きなファイルで見にくい |
less | 対話的確認 | スクロール可能、検索機能 | メモリ使用量やや多い |
more | 基本的確認 | 軽量 | 機能が限定的 |
nl | 番号付き表示 | 柔軟な番号付け | 単純表示のみ |
head/tail | 部分表示 | 効率的な部分確認 | 全体は見られない |
用途別の推奨コマンド
小さなファイル(100行以下)
cat filename.txt
# または
cat -n filename.txt
中サイズのファイル(100〜1000行)
less filename.txt
# または
nl filename.txt | less
大きなファイル(1000行以上)
less filename.txt
# 必要に応じて head/tail で部分確認
ログファイルの監視
tail -f /var/log/messages
設定ファイルの確認
nl /etc/nginx/nginx.conf | less
トラブルシューティング
よくある問題と対処法
Q:日本語が文字化けする
A:適切な文字エンコーディングを指定してください
# UTF-8で表示
LANG=ja_JP.UTF-8 less filename.txt
# 文字エンコーディングを変換
iconv -f EUC-JP -t UTF-8 filename.txt | less
Q:非常に大きなファイルでlessが重い
A:以下の方法を試してください
# 先頭部分のみ確認
head -1000 largefile.txt | less
# 検索対象を絞る
grep "pattern" largefile.txt | less
Q:バイナリファイルを開いてしまった
A:以下で安全に確認できます
# テキスト部分のみ表示
strings binaryfile | less
# 16進数で表示
hexdump -C binaryfile | less
Q:lessで画面が崩れる
A:画面をリフレッシュしてください
# less内で Ctrl+L を押す
# または -r オプションで起動
less -r filename.txt
よくある質問
Q:lessとmoreの違いは?
A:主な違いは以下の通りです
- less:前後移動可能、検索機能豊富、高機能
- more:前方移動のみ、基本機能のみ、軽量
Q:catとnlの使い分けは?
A:以下のように使い分けてください
- cat -n:シンプルな行番号表示
- nl:柔軟な番号付けオプション
Q:パイプ処理で1行ずつ処理する際の注意点は?
A:以下に注意してください
# 正しい方法
command | while read -r line; do
echo "$line"
done
# 避けるべき方法(変数が引き継がれない)
counter=0
command | while read -r line; do
((counter++))
done
echo $counter # 0 のまま
まとめ:効率的な1行ずつ表示をマスターしよう
この記事のポイント
用途 | おすすめコマンド | 特徴 |
---|---|---|
小さなファイル確認 | cat または cat -n | 高速、シンプル |
大きなファイル確認 | less | スクロール、検索可能 |
行番号付き表示 | nl または cat -n | 柔軟な番号付け |
ログ監視 | tail -f | リアルタイム表示 |
部分確認 | head /tail | 効率的な部分表示 |
スクリプト処理 | while read | 1行ずつ処理 |
使い分けの基準
- ファイルサイズ:小さいなら cat、大きいなら less
- 対話性:一度に確認なら cat、ゆっくり確認なら less
- 処理目的:表示のみなら cat/less、加工処理なら while read
- リアルタイム性:静的確認なら cat/less、動的監視なら tail -f
効率化のコツ
- 小さなファイルは cat で高速確認
- 大きなファイルは less で快適閲覧
- 行番号が必要なら nl で柔軟な番号付け
- ログ監視は tail -f でリアルタイム確認
Linuxでファイルや文字列を1行ずつ表示する方法をマスターすれば、用途に合わせてcat
でシンプルに、less
でゆっくり1行ずつスクロール確認、nl
やcat -n
で行番号をつけてチェック、tail -f
でログをリアルタイムで追いかけることができ、大量のテキストも見落としなくチェックできます。
コメント