コンテンツにスキップ

sd - 直感的な検索と置換 CLI チートシート

sd - 直感的な検索と置換 CLI チートシート

sd は Rust で書かれた高速な検索と置換コマンドラインツールで、一般的な場合をシンプルにするように設計されています。sed は暗号的な構文、脆弱なエスケープ、BSD/GNU 差分がある場合、sd は直前の正規表現 (またはリテラル文字列)、明白なキャプチャグループ参照 ($1)、および安全なファイルの読み込み/書き込みを使用します。日々の「これらのファイル全体でXをYに置換」タスクでは、sed より正しく取得するのがはるかに簡単です。

インストール

プラットフォームコマンド
Cargo (すべてのプラットフォーム)cargo install sd
macOS (Homebrew)brew install sd
Arch Linuxsudo pacman -S sd
Debian/Ubuntusudo apt install sd
Fedorasudo dnf install sd
確認sd --version

基本的な使用

sdは stdin またはファイルを読み込みます。形式は sd FIND REPLACE [FILES...] です。

コマンド説明
`echo “hello”sd hello world`
sd 'before' 'after' file.txtファイルで置換 (インプレース)
sd 'before' 'after' *.txt多くのファイル全体で置換
sd --help完全なオプションリスト

リテラル対 Regex

コマンド動作
sd 'a.b' 'X' fileRegex:. は任意の文字にマッチ
sd -s 'a.b' 'X' fileリテラル文字列 (-s/--string-mode)
sd '\d+' 'N' fileRegex 数字クラス

検索テキストが regex メタキャラクターを含み、リテラルとして扱いたい場合は -s を使用 — 手動エスケープなし。

キャプチャグループ

sd はシンプルな $1$2 参照を使用します (テキストに隣接する場合 ${1} )。

# 「First Last」→「Last, First」をスワップ
echo "Ada Lovelace" | sd '(\w+) (\w+)' '$2, $1'
# → Lovelace, Ada

# YYYY-MM-DD → DD/MM/YYYY 日付をリフォーマット
sd '(\d{4})-(\d{2})-(\d{2})' '$3/$2/$1' dates.txt

# グループが数字/文字に続く場合は括弧を使用
echo "v2" | sd 'v(\d)' 'version${1}0'   # → version20

キーオプション

オプション説明
-s, --string-modeFIND/REPLACE をリテラル文字列として扱う
-p, --preview書き込みなしで差分/結果を表示
-f, --flags FLAGSRegex フラグ:i (大文字小文字区別なし)、ms、等
-n, --max-replacements N置換数を制限
stdin/stdoutファイルを省略してフィルターとして動作

Regex フラグ (-f)

フラグ効果
i大文字小文字区別なし
mマルチラインn (^/$ ラインボーダーをマッチ)
sドットが改行をマッチ
w単語全体をマッチ
# 大文字小文字区別なし置換
sd -f i 'error' 'ERROR' log.txt

安全なプレビュー

# ファイルにタッチする前に何が変わるかを確認
sd -p 'foo' 'bar' src/*.rs

# その後適用
sd 'foo' 'bar' src/*.rs

一般的なワークフロー

# コードベース全体でシンボルをリネーム (最初にプレビュー)
sd -p 'oldFunctionName' 'newFunctionName' **/*.js
sd 'oldFunctionName' 'newFunctionName' **/*.js

# 末尾の空白を削除
sd ' +$' '' file.txt

# リテラルパスを置換 (文字列モードはドット/スラッシュのエスケープを回避)
sd -s './old/path.js' './new/path.js' config.json

# チェーン内のパイプ使用
cat access.log | sd '\d+\.\d+\.\d+\.\d+' '[REDACTED_IP]'

sd 対 sed

側面sdsed
構文シンプル、最新 regex簡潔、履歴的
キャプチャ参照$1, $2\1, \2
リテラルモード-s (エスケープなし)手動エスケープ
インプレースファイルのデフォルト-i (BSD/GNU 異なる)
ストリーミング編集 (sed スタイル)置換に焦点完全なストリームエディター

sd は焦点を絞った検索と置換;置換を超えたストリーム編集には sed/awk が適用。検索 (置換ではなく) には ripgrep とペア。

リソース