テキスト処理

テキストファイルの表示(ひょうじ)編集(へんしゅう)処理(しょり)分析(ぶんせき)

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/passwd

cat

ファイル内容(ないよう)表示(ひょうじ)

# ファイルを表示
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.txt

fzf

ファジー検索(けんさく) ツール。インタラクティブな選択(せんたく) をサポート

# 現在のディレクトリでファジー検索
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/log

less

ファイル内容(ないよう) をページ表示(ひょうじ)

オプション用途使用する場面
-RANSI カラーを表示curl / docker / git log
-S自動改行をしないログ / JSON を確認する時
-F1画面以内ならそのまま表示短い出力
-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