テキストファイルの表示、検索、編集、加工などを行うコマンドです。
ファイルの内容を表示したり、複数のファイルを連結したりします。
| オプション | 説明 |
|---|---|
| -n | 行番号を表示 |
| -b | 空行以外の行に行番号を表示 |
| -s | 連続する空行を1行にまとめる |
| -A | 制御文字や特殊文字を表示(タブ、改行など) |
例:
cat file.txt - ファイルの内容を表示cat file1.txt file2.txt - 複数のファイルの内容を連結して表示cat file1.txt file2.txt > combined.txt - 複数のファイルを連結して新しいファイルに保存
ファイル内のテキストパターンを検索します。
| オプション | 説明 |
|---|---|
| -i | 大文字と小文字を区別しない |
| -v | パターンに一致しない行を表示 |
| -n | 行番号を表示 |
| -r, -R | ディレクトリ内のファイルを再帰的に検索 |
| -l | パターンを含むファイル名のみを表示 |
| -c | パターンに一致する行数を表示 |
| -E | 拡張正規表現を使用 |
| -A n | 一致した行の後 n 行を表示 |
| -B n | 一致した行の前 n 行を表示 |
| -C n | 一致した行の前後 n 行を表示 |
例:
grep "pattern" file.txt - ファイル内でパターンに一致する行を検索grep -i "pattern" file.txt - 大文字小文字を区別せずに検索grep -r "pattern" directory/ - ディレクトリ内のすべてのファイルから再帰的に検索grep -E "pattern1|pattern2" file.txt - 複数のパターンのいずれかに一致する行を検索grep -v "^#" config.txt | grep -v "^$" - コメント行と空行を除外(パイプを使用)ps aux | grep "[f]irefox" - grepプロセス自体を除外してfirefoxプロセスを検索grep -A 2 -B 1 "ERROR" log.txt - エラー行とその前後の行を表示grep -o "([0-9]\{1,3\}\.){3}[0-9]\{1,3\}" file.txt - IPアドレスのみを抽出find . -name "*.log" -exec grep -l "ERROR" {} \; | xargs wc -l - エラーを含むログファイルの行数をカウントhistory | grep "git commit" | sed 's/^[ 0-9]*//' - コミット履歴のコマンドのみを抽出
テキストの置換、削除、挿入などの編集を行います。
| オプション/構文 | 説明 |
|---|---|
| -i | ファイルを直接編集(デフォルトでは標準出力に出力) |
| -e | 複数のコマンドを指定 |
| -n | 自動出力を抑制(特定のパターンに一致する行のみ出力) |
| s/pattern/replacement/ | パターンを置換 |
| s/pattern/replacement/g | パターンをすべて置換(gはグローバルの意味) |
| d | パターンに一致する行を削除 |
| p | パターンに一致する行を出力(通常は-nと共に使用) |
例:
sed 's/old/new/' file.txt - 各行の最初の「old」を「new」に置換sed 's/old/new/g' file.txt - 各行のすべての「old」を「new」に置換sed -i 's/old/new/g' file.txt - ファイルを直接編集して置換sed '/pattern/d' file.txt - パターンに一致する行を削除sed -n '/pattern/p' file.txt - パターンに一致する行のみを表示sed -i.bak 's/old/new/g' file.txt - 元ファイルをバックアップしてから編集sed '1,5s/old/new/g' file.txt - 1行目から5行目までの「old」を「new」に置換sed '/start/,/end/d' file.txt - 「start」から「end」までのパターンに一致する行の範囲を削除sed 's/[0-9]\{3\}-[0-9]\{4\}/XXX-XXXX/g' file.txt - 電話番号形式のテキストをマスクcat file.txt | sed 's/^[ \t]*//' - 各行の先頭の空白を削除(パイプを使用)echo "hello world" | sed 's/\b\(.\)/\u\1/g' - 各単語の先頭を大文字に変換sed -e 's/old/new/g' -e 's/foo/bar/g' file.txt - 複数の置換を一度に実行grep "ERROR" log.txt | sed 's/.*ERROR: \(.*\)/\1/' - エラーメッセージのみを抽出
テキストデータの加工や分析を行うためのプログラミング言語です。
| 構文/パターン | 説明 |
|---|---|
| '{print $1}' | 各行の1番目のフィールド(列)を出力 |
| '{print $1, $3}' | 各行の1番目と3番目のフィールドを出力 |
| -F | フィールド区切り文字を指定(デフォルトは空白) |
| '/pattern/ {action}' | パターンに一致する行に対してアクションを実行 |
| NR | 現在の行番号 |
| NF | 現在の行のフィールド数 |
例:
awk '{print $1}' file.txt - 各行の1番目のフィールドを出力awk -F, '{print $1, $3}' file.csv - CSVファイルの1番目と3番目のフィールドを出力awk '/pattern/ {print $0}' file.txt - パターンに一致する行を出力awk '{sum += $1} END {print sum}' file.txt - 1番目のフィールドの合計を計算して出力awk '{count[$1]++} END {for (word in count) print word, count[word]}' file.txt - 各単語の出現回数をカウントawk -F, '{if ($3 > 100) print $1, $2, $3}' data.csv - 条件に一致する行のみを出力awk 'NR % 2 == 0' file.txt - 偶数行のみを出力awk 'length($0) > 80' file.txt - 80文字より長い行を出力awk 'BEGIN {FS=","; OFS="\t"} {print $1, $2, $3}' file.csv - CSVをTSVに変換ps aux | awk '$3 > 10.0 {print $2, $3, $11}' - CPU使用率が10%を超えるプロセスを表示cat /etc/passwd | awk -F: '{print "User: " $1 ", Home: " $6}' - ユーザー情報を整形して表示ls -l | awk '{sum += $5} END {printf "Total size: %.2f MB\n", sum/1024/1024}' - ディレクトリ内のファイルサイズ合計をMB単位で表示grep "ERROR" log.txt | awk -F: '{print $1}' | sort | uniq -c - エラーが発生したファイルとその回数を表示
ファイルの先頭または末尾の一部を表示します。
| コマンド/オプション | 説明 |
|---|---|
| head file.txt | ファイルの先頭10行を表示 |
| head -n N file.txt | ファイルの先頭N行を表示 |
| tail file.txt | ファイルの末尾10行を表示 |
| tail -n N file.txt | ファイルの末尾N行を表示 |
| tail -f file.txt | ファイルの末尾を表示し、追加されるデータをリアルタイムに表示(ログ監視などに便利) |
例:
head -n 5 file.txt - ファイルの先頭5行を表示tail -n 20 file.txt - ファイルの末尾20行を表示tail -f /var/log/syslog - システムログをリアルタイムに監視head -n 5 file.txt | tail -n 1 - ファイルの5行目のみを表示tail -n +10 file.txt | head -n 5 - 10行目から5行分を表示ls -l | head -n 5 - ディレクトリ内の最初の5つのファイルを表示find . -type f -name "*.log" | head - 最初の10個のログファイルを表示ps aux | sort -nrk 3,3 | head -n 5 - CPU使用率の高い上位5つのプロセスを表示tail -f log.txt | grep --color "ERROR" - エラーメッセージをハイライト表示しながらログを監視tail -f /var/log/apache2/access.log /var/log/apache2/error.log - 複数のログファイルを同時に監視find . -type f -mtime -1 | xargs wc -l | head - 過去24時間以内に変更されたファイルの行数上位10件を表示
テキストファイルの行をソートします。
| オプション | 説明 |
|---|---|
| -r | 逆順(降順)でソート |
| -n | 数値としてソート |
| -k N | N番目のフィールド(列)でソート |
| -t | フィールド区切り文字を指定 |
| -u | 重複行を削除(ユニークな行のみ出力) |
| -f | 大文字小文字を区別せずにソート |
例:
sort file.txt - ファイルの内容をアルファベット順にソートsort -r file.txt - 逆順でソートsort -n numbers.txt - 数値としてソートsort -k 2 -t, file.csv - CSVファイルの2番目のフィールドでソートsort -k 2n -t: file.txt - 2番目のフィールドを数値としてソート(区切り文字は:)sort -k 3,3 -k 1,1 file.txt - 3列目でソートし、同じ値は1列目でソートsort -u file.txt - ソートして重複行を削除sort -h sizes.txt - 人間が読みやすい形式(K, M, G)でソートdu -h | sort -hr - ディレクトリサイズを大きい順にソートps aux | sort -nrk 3,3 | head -n 10 - CPU使用率の高い順に上位10プロセスを表示cat /etc/passwd | sort -t: -k 3 -n - ユーザーをUID順にソートfind . -type f -name "*.log" | xargs ls -l | sort -k 5 -nr - ログファイルをサイズ順にソート
連続する重複行を処理します(通常はsortと組み合わせて使用)。
| オプション | 説明 |
|---|---|
| -c | 出現回数を表示 |
| -d | 重複する行のみを表示 |
| -u | 重複しない行のみを表示 |
| -i | 大文字小文字を区別せずに比較 |
例:
sort file.txt | uniq - ソートしてから重複行を削除sort file.txt | uniq -c - 各行の出現回数を表示sort file.txt | uniq -d - 重複する行のみを表示sort file.txt | uniq -u - 重複しない行のみを表示sort file.txt | uniq -c | sort -nr - 出現頻度の高い順に表示cat access.log | cut -d' ' -f1 | sort | uniq -c | sort -nr - IPアドレスのアクセス頻度を集計cat file.txt | tr '[:upper:]' '[:lower:]' | sort | uniq - 大文字小文字を区別せずに重複を削除history | cut -c8- | sort | uniq -c | sort -nr | head -n 10 - 最もよく使うコマンド上位10個を表示find . -type f -name "*.txt" | xargs cat | sort | uniq -c - 全テキストファイル内の行の出現回数を集計grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' access.log | sort | uniq -c | sort -nr - ログファイル内のIPアドレスの出現頻度を集計
ファイルの行数、単語数、バイト数をカウントします。
| オプション | 説明 |
|---|---|
| -l | 行数のみをカウント |
| -w | 単語数のみをカウント |
| -c | バイト数のみをカウント |
| -m | 文字数のみをカウント |
例:
wc file.txt - ファイルの行数、単語数、バイト数を表示wc -l file.txt - ファイルの行数のみを表示wc -w file.txt - ファイルの単語数のみを表示wc -c file.txt - ファイルのバイト数のみを表示wc -m file.txt - ファイルの文字数を表示(マルチバイト文字を正しくカウント)find . -name "*.py" | xargs wc -l - すべてのPythonファイルの行数を表示find . -name "*.py" | xargs wc -l | sort -nr - Pythonファイルを行数の多い順にソートgrep -v "^#" script.sh | grep -v "^$" | wc -l - コメントと空行を除いたスクリプトの実行行数cat file.txt | tr -s ' ' '\n' | sort | uniq | wc -l - ファイル内のユニークな単語数をカウントls -la | wc -l - ディレクトリ内のファイル数をカウント(ヘッダー行を含む)for file in *.txt; do echo -n "$file: "; wc -l < "$file"; done - 各テキストファイルの行数を表示find . -type f -exec cat {} \; | wc -l - ディレクトリ内のすべてのファイルの合計行数