Aller au contenu

sd - Cheatsheet CLI Intuitive Trouve et Remplace

sd - Cheatsheet CLI Intuitive Trouve et Remplace

sd est un outil CLI rapide de trouve-et-remplace écrit en Rust, conçu pour rendre le cas courant simple. Là où sed a une syntaxe cryptique, une échappement fragile et des différences BSD/GNU, sd utilise la regex simple (ou les chaînes littérales), les références de groupe de capture évidentes ($1) et lit/écrit les fichiers de manière sécurisée. Pour la tâche quotidienne « remplacer X avec Y dans ces fichiers », c”est beaucoup plus facile à bien faire que sed.

Installation

PlateformeCommande
Cargo (toutes les plateformes)cargo install sd
macOS (Homebrew)brew install sd
Arch Linuxsudo pacman -S sd
Debian/Ubuntusudo apt install sd
Fedorasudo dnf install sd
Vérificationsd --version

Utilisation Basique

sd lit stdin ou des fichiers. La forme est sd FIND REPLACE [FILES...].

CommandeDescription
`echo “hello”sd hello world`
sd ''before'' ''after'' file.txtRemplacer dans un fichier (in place)
sd ''before'' ''after'' *.txtRemplacer dans plusieurs fichiers
sd --helpListe complète des options

Littéral vs Regex

CommandeComportement
sd ''a.b'' ''X'' fileRegex : . correspond à n”importe quel char
sd -s ''a.b'' ''X'' fileChaîne littérale (-s/--string-mode)
sd ''\d+'' ''N'' fileClasse regex des chiffres

Utiliser -s quand ton texte de recherche contient des caractères spéciaux regex que tu veux traiter littéralement — pas d”échappement manuel.

Groupes de Capture

sd utilise des références simples $1, $2 (ou ${1} quand adjacent au texte).

# Échanger « First Last » → « Last, First »
echo "Ada Lovelace" | sd ''(\w+) (\w+)'' ''$2, $1''
# → Lovelace, Ada

# Reformater les dates YYYY-MM-DD → DD/MM/YYYY
sd ''(\d{4})-(\d{2})-(\d{2})'' ''$3/$2/$1'' dates.txt

# Utiliser les accolades quand le groupe est suivi de chiffres/lettres
echo "v2" | sd ''v(\d)'' ''version${1}0''   # → version20

Options Clés

OptionDescription
-s, --string-modeTraiter FIND/REPLACE comme des chaînes littérales
-p, --previewAfficher le diff/résultat sans écrire
-f, --flags FLAGSDrapeaux regex : i (insensible à la casse), m, s, etc.
-n, --max-replacements NLimiter le nombre de remplacements
stdin/stdoutOmmettre les fichiers pour agir comme un filtre

Drapeaux Regex (-f)

DrapeauEffet
iInsensible à la casse
mMultiligne (^/$ correspondent aux limites de ligne)
sLe point correspond aux newlines
wCorrespondre aux mots entiers
# Remplacer insensible à la casse
sd -f i ''error'' ''ERROR'' log.txt

Aperçu Sécurisé

# Voir ce qui CHANGERAIT avant de toucher aux fichiers
sd -p ''foo'' ''bar'' src/*.rs

# Puis appliquer
sd ''foo'' ''bar'' src/*.rs

Flux de Travail Courants

# Renommer un symbole à travers une base de code (aperçu d''abord)
sd -p ''oldFunctionName'' ''newFunctionName'' **/*.js
sd ''oldFunctionName'' ''newFunctionName'' **/*.js

# Supprimer les espaces blancs de fin
sd '' +$'' '''' file.txt

# Remplacer un chemin littéral (mode chaîne évite d''échapper les points/slashes)
sd -s ''./old/path.js'' ''./new/path.js'' config.json

# Utilisation pipe dans une chaîne
cat access.log | sd ''\d+\.\d+\.\d+\.\d+'' ''[REDACTED_IP]''

sd vs sed

Aspectsdsed
SyntaxeRegex simple, modernesTerse, historique
Refs de capture$1, $2\1, \2
Mode littéral-s (pas d”échappement)Échappement manuel
In-placeDéfaut pour les fichiers-i (BSD/GNU diffèrent)
Édits de streaming (style sed)Focalisé sur remplacerÉditeur de stream complet

sd est un trouve-et-remplace focalisé ; pour l”édition de stream au-delà de la substitution, sed/awk s”appliquent toujours. Pour chercher (pas remplacer), associer avec ripgrep.

Ressources