テキストファイルの表示、検索、編集、加工などを行うコマンドです。
ファイルの内容を表示したり、複数のファイルを連結したりします。
オプション | 説明 |
---|---|
-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
- ディレクトリ内のすべてのファイルの合計行数