Linuxでファイルや文字列を1行ずつ表示する方法|cat・less・nlの便利な使い方

Linux

Linuxでログや設定ファイルを確認するとき「ファイルを1行ずつゆっくり見たい」「長いリストを1行ずつ確実に表示したい」「行番号付きで内容を確認したい」と思う場面があります。

こんな場面で必要になります

  • 設定ファイルを行番号付きで確認したい
  • ログファイルを詳しく分析したい
  • プログラムの実行結果を丁寧にチェックしたい
  • 大量のデータを見落としなく確認したい
  • シェルスクリプトで配列を1行ずつ処理したい

そのままcatで表示すると一気に画面に流れてしまい、肝心の部分が見逃しやすいですよね。

この記事では、Linuxでファイルや文字列を1行ずつ表示する方法を初心者にもわかりやすく解説します。基本的なcatlessから、行番号付きの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の基本

morelessの前身となるコマンドです。基本的な機能は似ていますが、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 read1行ずつ処理

使い分けの基準

  • ファイルサイズ:小さいなら cat、大きいなら less
  • 対話性:一度に確認なら cat、ゆっくり確認なら less
  • 処理目的:表示のみなら cat/less、加工処理なら while read
  • リアルタイム性:静的確認なら cat/less、動的監視なら tail -f

効率化のコツ

  • 小さなファイルは cat で高速確認
  • 大きなファイルは less で快適閲覧
  • 行番号が必要なら nl で柔軟な番号付け
  • ログ監視は tail -f でリアルタイム確認

Linuxでファイルや文字列を1行ずつ表示する方法をマスターすれば、用途に合わせてcatでシンプルに、lessでゆっくり1行ずつスクロール確認、nlcat -nで行番号をつけてチェック、tail -fでログをリアルタイムで追いかけることができ、大量のテキストも見落としなくチェックできます。

コメント

タイトルとURLをコピーしました