Šķîþ ţö ḿàîñ çöñţéñţ

ķšéđ

Àþþļý sed-šţýļé šüƃšţîţüţîöñš ţö ţĥé ĥüḿàñ-ŕéàđàƃļé ţéẋţ îñšîđé àñý šüþþöŕţéđ ƒöŕḿàţ, ţĥéñ ŵŕîţé ţĥé đöçüḿéñţ ƃàçķ îñ ţĥé šàḿé ƒöŕḿàţ. Öñļý ţĥé éđîţàƃļé ţéẋţ çĥàñĝéš: à .docx ķééþš îţš šţýļéš, à ĴŠÖÑ çàţàļöĝ ķééþš îţš ķéýš àñđ šĥàþé.

ksed [flags] SCRIPT [FILE...]

SCRIPT îš à šüƃšţîţüţîöñ çöḿḿàñđ, s/regexp/replacement/flags:

  • Àñý šîñĝļé-ƃýţé đéļîḿîţéŕ ŵöŕķš, šö s|a|b| îš éǫüîṽàļéñţ ţö s/a/b/, ŵĥîçĥ ĥéļþš ŵĥéñ ţĥé ţéẋţ çöñţàîñš šļàšĥéš.
  • Ţĥé g ƒļàĝ ŕéþļàçéš éṽéŕý ḿàţçĥ îñ à ƃļöçķ (öţĥéŕŵîšé öñļý ţĥé ƒîŕšţ); ţĥé i ƒļàĝ ḿàķéš ţĥé ḿàţçĥ çàšé-îñšéñšîţîṽé.
  • Ŕéþļàçéḿéñţš šüþþöŕţ ƃàçķŕéƒéŕéñçéš \1\9 àñđ & ƒöŕ ţĥé ŵĥöļé ḿàţçĥ.
  • Þàšš šéṽéŕàļ šüƃšţîţüţîöñš ŵîţĥ ŕéþéàţéđ -e.

Ƃý đéƒàüļţ ţĥé éđîţéđ đöçüḿéñţ îš ŵŕîţţéñ ţö šţàñđàŕđ öüţþüţ, ļîķé sed. Üšé -i ţö éđîţ ƒîļéš îñ þļàçé, öþţîöñàļļý ķééþîñĝ à ƃàçķüþ (-i.bak). Ŵîţĥ ñö ƒîļé, öŕ ŵĥéñ ţĥé ƒîļé îš -, šţàñđàŕđ îñþüţ îš ŕéàđ.

Éđîţîñĝ à ƃîñàŕý đöçüḿéñţ þŕöđüçéš à ƃîñàŕý đöçüḿéñţ: à .docx ĝöéš ƃàçķ öüţ àš à žîþ. Ŵĥéñ šţàñđàŕđ öüţþüţ îš à ţéŕḿîñàļ, ţĥàţ îš ŕéƒüšéđ ŕàţĥéŕ ţĥàñ šţŕéàḿéđ àţ îţ. Üšé -i, ŕéđîŕéçţ šţđöüţ ţö à ƒîļé, öŕ þàšš --force ţö àšķ ƒöŕ ţĥé ƃýţéš àñýŵàý. Ŕéđîŕéçţéđ àñđ þîþéđ öüţþüţ îš ñéṽéŕ îñšþéçţéđ, šö ksed … > out.docx àñđ ksed … | kcat - ƃéĥàṽé éẋàçţļý àš ţĥéý àļŵàýš đîđ. Îţ îš ţĥé šàḿé çöñṽéñţîöñ gzip àñđ xz ƒöļļöŵ, ƒöŕ ţĥé šàḿé ŕéàšöñ.

Éẋàḿþļéš

# Normalise spelling across a Markdown guide (to stdout)
ksed 's/colour/color/g' guide.md

# Rebrand in place across every Word document
ksed -i 's/Inc\./LLC/' *.docx

# Two substitutions, keeping a .bak backup of each file
ksed -i.bak -e 's/v1/v2/g' -e 's/beta//' locales/en.json

# Edit the French translations rather than the source
ksed --target fr 's/Bonjour/Salut/g' messages.xliff

# Reorder with backreferences
ksed 's/(\w+), (\w+)/\2 \1/' names.txt

# Edit a whole documentation tree in place
ksed -R -i 's/colour/color/g' docs

Öþţîöñš

ƑļàĝḾéàñîñĝ
-e, --expression SCRIPTÀđđ à šüƃšţîţüţîöñ šçŕîþţ (ŕéþéàţàƃļé).
-i, --in-place[=SUFFIX]Éđîţ ƒîļéš îñ þļàçé; àþþéñđ à ƃàçķüþ SUFFIX îƒ ĝîṽéñ (é.ĝ. -i.bak).
-R, --recursiveŔéçüŕšé îñţö đîŕéçţöŕý àŕĝüḿéñţš.
--target LOCALEÉđîţ ţĥé ţŕàñšļàţîöñ ƒöŕ LOCALE îñšţéàđ öƒ ţĥé šöüŕçé.
--forceŴŕîţé àñ éđîţéđ ƃîñàŕý đöçüḿéñţ ţö ţĥé ţéŕḿîñàļ àñýŵàý.
-f, --formatÖṽéŕŕîđé ƒöŕḿàţ đéţéçţîöñ (é.ĝ. -f json).
--source-langŠöüŕçé ļàñĝüàĝé (đéƒàüļţ en).
--encodingÎñþüţ/öüţþüţ éñçöđîñĝ (đéƒàüļţ UTF-8).

Ŕéçüŕšîöñ îš -R, ñöţ ţĥé -r ţĥé öţĥéŕ üţîļîţîéš üšé. Îñ šéđ, -r ḿéàñš --regexp-extended, àñđ ƃîñđîñĝ îţ ţö ŕéçüŕšîöñ ĥéŕé ŵöüļđ ŕéŵŕîţé à ŵĥöļé đîŕéçţöŕý ţŕéé ƒöŕ šöḿéöñé ŵĥö öñļý àšķéđ ƒöŕ à đéŕéñţ ŕéĝéẋþ đîàļéçţ. -r îš ţĥéŕéƒöŕé ļéƒţ üñƃöüñđ, àñđ ţýþîñĝ îţ îš àñ éŕŕöŕ ŕàţĥéŕ ţĥàñ à šüŕþŕîšé.

Ƒàîţĥƒüļ ŕöüñđ-ţŕîþš

ksed ŕéüšéš kapi'š ŕéàđéŕ/ŵŕîţéŕ þîþéļîñé, šö éđîţîñĝ à šţŕüçţüŕéđ ƒöŕḿàţ àñđ ŵŕîţîñĝ îţ ƃàçķ þŕéšéŕṽéš éṽéŕýţĥîñĝ ţĥàţ îš ñöţ ţĥé éđîţéđ ţéẋţ. Ƒöŕ ƒöŕḿàţš ŵîţĥ à šķéļéţöñ (Öƒƒîçé Öþéñ ẊḾĻ àḿöñĝ ţĥéḿ) ţĥé đöçüḿéñţ'š šţŕüçţüŕé, šţýļéš àñđ ñöñ-ţŕàñšļàţàƃļé çöñţéñţ ŕöüñđ-ţŕîþ üñçĥàñĝéđ; ţĥé ƒîđéļîţý îš šéḿàñţîç (ţĥé šàḿé ţéẋţ àñđ šţŕüçţüŕé), ñöţ à ƃýţé-ƒöŕ-ƃýţé çöþý. Öñļý ţĥé s/// šüƃšţîţüţîöñ çöḿḿàñđ îš šüþþöŕţéđ; çöḿþöšé ḿüļţîþļé ŵîţĥ -e.

Îñļîñé ƒöŕḿàţţîñĝ ŵîţĥîñ à ƃļöçķ îš þŕéšéŕṽéđ àš ŵéļļ. Ţĥé þàţţéŕñ ḿàţçĥéš ţĥé ƃļöçķ'š ţéẋţ ŵîţĥ îţš îñļîñé çöđéš ŕéḿöṽéđ, šö à šüƃšţîţüţîöñ çàñ šþàñ à ƃöļđ öŕ ļîñķéđ šþàñ: s/Hello world/Hi/ ḿàţçĥéš éṽéñ ŵĥéñ ŵöŕļđ îš ƃöļđ. Éđîţîñĝ à ŵöŕđ îñšîđé à <b> šþàñ ķééþš ţĥé šþàñ àŕöüñđ ţĥé ñéŵ ŵöŕđ.

Ŵĥéñ àñ éđîţ ŕéḿöṽéš ţĥé ţéẋţ à çöđé àþþļîéđ ţö, ŵĥàţ ĥàþþéñš đéþéñđš öñ ŵĥéţĥéŕ ţĥé çöđé îš đéļéţàƃļé, ţĥé šàḿé ṽöçàƃüļàŕý çöñšţŕàîñţ ţĥé çĥéçķš üšé (šéé Îñļîñé Ƒöŕḿàţţîñĝ). À đéļéţàƃļé ƒöŕḿàţţîñĝ šþàñ (ƃöļđ, îţàļîç, à ļîñķ) ţĥàţ îš éḿþţîéđ çöļļàþšéš, šö ķšéđ ļéàṽéš ñö éḿþţý <b></b> ƃéĥîñđ. À ñöñ-đéļéţàƃļé çöđé (à ļîñé ƃŕéàķ, à ṽàŕîàƃļé, à þļàçéĥöļđéŕ, à šüƃƃļöçķ ŕéƒéŕéñçé) îš àļŵàýš ķéþţ, éṽéñ ŵĥéñ ţĥé ţéẋţ àŕöüñđ îţ îš ŕéþļàçéđ.