テキスト処理
テキストファイルの表示 、編集 、処理 、分析
awk
データを操作 してレポートを生成
# 基本構文例
awk '{print}' tmnt.txt
awk '{print $1}' tmnt.txt
awk '{print $1,$3}' tmnt.txt
# NF (number of fields) を使用
awk '{print $NF}' tmnt.txt
# 指定された区切り文字を使用
awk -F':' '{print $2}' /etc/passwd
awk -F':' '{print $1,$7}' /etc/passwdcat
ファイル内容 を表示
# ファイルを表示
cat .bash_history
cat /etc/shells
cat /etc/os-release
# ファイルに内容を追加
cat > new_file.txt # 置換
cat >> new_file.txt # 追記
cat [file1] [file2] > combine.txt # 結合delta
現代 的 な diff ツール。シンタックスハイライト、行番号 、git 統合 をサポート
# 2つのファイルを比較
delta file1.txt file2.txt
# git と統合(~/.gitconfig で設定)
# [core]
# pager = delta
# [delta]
# line-numbers = true
# side-by-side = true
# サイドバイサイド表示
delta --side-by-side file1.txt file2.txt
# 行番号を表示
delta --line-numbers file1.txt file2.txtfzf
ファジー検索 ツール。インタラクティブな選択 をサポート
# 現在のディレクトリでファジー検索
fzf
# ファイル内容をプレビュー
fzf --preview 'cat {}'
# 他のコマンドと組み合わせる
vim $(fzf)
cd $(find . -type d | fzf)
# 履歴コマンドを検索(通常 Ctrl+R にバインド)
history | fzf
# 複数選択モード
fzf -m
# 検索パスを指定
find /var/log -name "*.log" | fzf常用 ショートカット:
Ctrl+J/K: 上下 移動Enter: 選択Tab: 複数 選択 マークCtrl+C: キャンセル
grep
テキスト検索
# 基本的な使用法
grep Port /etc/ssh/sshd_config
# よく使うオプション
# -i : 大文字小文字を無視
# -n : 行番号を表示
# -c : 一致回数を表示
# -v : 一致しない行を表示
# -r : 再帰的に検索
# 例
grep -n Human characters.txt
grep -c Human characters.txt
grep -i human characters.txt
grep -r Error /var/logless
ファイル内容 をページ表示
| オプション | 用途 | 使用する場面 |
|---|---|---|
-R | ANSI カラーを表示 | curl / docker / git log |
-S | 自動改行をしない | ログ / JSON を確認する時 |
-F | 1画面以内ならそのまま表示 | 短い出力 |
-X | 終了時に画面をクリアしない | 確認後も画面を残したい時 |
-n | 行番号の事前スキャンをしない | 非常に大きなファイル |
-N | 行番号を表示 | 小さいファイル |
+G | ファイルの末尾から表示 | 最新ログを確認する時 |
+F | フォローモード | ライブログ(リアルタイム確認) |
# ファイル全体を表示
less -R -S -n server.log
# よく使うショートカット
# q : 終了
# g : ファイルの先頭へ
# G : ファイルの末尾へ
# /search : テキストを検索rg (ripgrep)
現代 的 な grep の代替 。より高速 、デフォルトで再帰 検索
# 基本検索(再帰、.gitignore を無視)
rg "pattern"
# 特定のファイルタイプを検索
rg -t py "import"
# コンテキストを表示
rg -C 3 "error"
# 大文字小文字を無視
rg -i "error"
# ファイル名のみを表示
rg -l "TODO"
# 行番号を表示(デフォルトで有効)
rg -n "pattern"
# 隠しファイルを検索
rg --hidden "pattern"
# 正規表現を使用
rg "log.*error"
# 逆検索
rg -v "pattern"
# 一致数を統計
rg -c "pattern"sed
ストリームエディタ
# テキストを置換
sed 's/:/\n/g' <<< "$PATH"
# ファイルを変更
sed -i 's/Pineapple/Feta/' toppings.txt
# 組み合わせて使用
echo "hi" | sed 's/hi/goodbye/'tail
ファイルの末尾 を表示
# ファイルの変更を追跡
tail -f server.log
# 行数を指定
tail -n [number] [file]wc
テキスト数 を統計
# ファイルを統計
wc helloworld.java
# 特定のファイルタイプの数を統計
ls *.py | wc -l