All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
A quick note to any packages. The generated shell completions and man page are
now in the gen
directory of the repo. They're also included in the pre-built
release artifacts on the releases page.
- #115 Do not replace symlink with output file (@SimplyDanny)
- Fixes an issue where a symlink would be replaced with a regular file
- #124 Fix tests (@Linus789)
- Removed displaying the file path when passing the
--preview
flag and fixed how text coloring was handled in tests
- Removed displaying the file path when passing the
- #192 Rename
--string-mode
to--fixed-strings
(@CosmicHorrorDev)- Renamed
-s
--string-mode
to-f
--fixed-strings
to better match similar tools -s
and--string-mode
will still continue to work for backwards compatibility, but are no longer documented
- Renamed
- #258 Error on
$<num><non_num>
capture replacement names (@CosmicHorrorDev)- Previously when you tried to use a numbered capture group right before some
letters in the replacement text (e.g.
$1foo
) then it would be considered the impossible-to-use1foo
capture. The correct way to pass the numbered capture group in this case would be to surround the number with curly braces like so${1}foo
. The error just detects this case and informs the user of the issue
- Previously when you tried to use a numbered capture group right before some
letters in the replacement text (e.g.
- #93 Add note about in-place file modification to --help output (@jchook)
- #148 Doc: nitpick
--
has no special meaning to shells (@hexagonrecursion) - #181 Fix man page -f flag help text (@ulope)
- Fixed copy-pasted text in the man page's
-f
flag's help text
- Fixed copy-pasted text in the man page's
- #186 Improve error message for failed replacements (@CosmicHorrorDev)
- #187 Freshen up README (@CosmicHorrorDev)
- Added a repology badge to document different installation methods
- Improved the formatting of the benchmarks
- #207 Documenting
$
escape (@yahkbar)- Adds a section in the README that covers that
$$
is a literal$
in the replacement text
- Adds a section in the README that covers that
- #227 Improve README readability (@vassudanagunta)
- Various formatting improvements
- #231 Use
clap_mangen
androff
to generate manpage (@nc7s)- This change ensures the man page contents stay in sync with the CLI automatically, and fixes some broken rendering of the existing manpage
- #243 Exclude unsupported packages from the repology badge (@CosmicHorrorDev)
- (11295fb) Add ARM target (@chmln)
- Added the
arm-unknown-linux-gnueabihf
target to CI and releases
- Added the
- #114 Adding
aarch64-apple-darwin
target (@yahkbar) - #143 Fix paths to release binary in "publish" action (@skrattaren)
- #179 Build Adjustments (@yahkbar)
strip
ed release binaries and added theaarch64-ubuntu-linux-musl
target
- #204 Adding
armv7-unknown-linux-gnueabihf
target (@yahkbar)- Added the
armv7-unknown-linux-gnueabihf
target to the list of targets to build in CI and for each release
- Added the
- #205 Resolving broken
aarch64-apple-darwin
tests (@yahkbar)- Switched
aarch64-apple-darwin
to only try building the executable without running the tests since there seems to be no easy way to test for ARM Apple targets
- Switched
- #206 Adding Windows builds back (@yahkbar)
- Added the
x86_64-pc-windows-gnu
andx86_64-windows-musl
targets back to the list of targets to build in CI and for each release
- Added the
- #118 Fix master (@SimplyDanny)
- Fixes several cross-compilation issues that effected different targets in CI
- #182
cargo update
(@CosmicHorrorDev)- Bumps dependencies to their latest compatible versions
- #183 Switch
memmap
->memmap2
(@CosmicHorrorDev)- Switches away from an unmaintained crate
- #184 Add editor config file matching rustfmt config (@CosmicHorrorDev)
- Adds an
.editorconfig
file matching the settings listed in the.rustfmt.toml
file
- Adds an
- #185 Fix warnings and clippy lints (@CosmicHorrorDev)
- #188 Switch
atty
foris-terminal
(@CosmicHorrorDev)- Switches away from an unmaintained crate
- #189 Replace structopt with clap v4 (@CosmicHorrorDev)
- Switches away from a defacto deprecated crate
- #190 Change how all shell variants are expressed (@CosmicHorrorDev)
- Tiny tidying up PR
- #196 Move generating static assets to a
cargo-xtask
task (@CosmicHorrorDev)- Moves the generation of the man page and shell completions from a build
script to a
cargo-xtask
task
- Moves the generation of the man page and shell completions from a build
script to a
- #197 Add a release checklist (@CosmicHorrorDev)
- #209 Dependency updates (@yahkbar)
- #235 Update generated assets (@CosmicHorrorDev)
- #236 Tone down dependabot (@CosmicHorrorDev)
- #245 Update sd to 2021 edition (@CosmicHorrorDev)
- Updates
sd
to the Rust 2021 edition
- Updates
- #248 Misc Cargo.toml tweaks (@CosmicHorrorDev)
- Switches to use workspace edition and dependencies where appropriate
- #249 Resolve CI warnings (@CosmicHorrorDev)
- Switched from
actions-rs
actions todtolnay@rust-toolchain
- Switched from using
::set-output
to$GITHUB_ENV
- Switched from
- #251 Update dependencies (@CosmicHorrorDev)
- A lot of sad CI tweaking:
- #252 Fix build target usage in CI (@CosmicHorrorDev)
- #253 Improve publishing CI job (@CosmicHorrorDev)
- #256 More CI tweaks (@CosmicHorrorDev)
- #257 Fix publish action (@CosmicHorrorDev)
- #267 Rework the replacements flag (@CosmicHorrorDev)
- #269 Make modified text blue instead of green (@CosmicHorrorDev)
- #271 Fix release checklist indentation (@CosmicHorrorDev)
- #272 Remove outdated release checklist step (@CosmicHorrorDev)
- #274 Prepare 1.0.0-beta.0 release (@CosmicHorrorDev)
- #275 Update
sd
version in lockfile (@CosmicHorrorDev)
- Fixed pre-allocated memmap buffer size
- Fixed failing tests
sd
now uses memory-mapped files, allowing replacement on files of any size-p
/--preview
flag is now added to preview changes- as of right now, results are simply emitted to stdout
- in a future version, the output will be changed to contain only relevant information
- a
w
regex flag is added to match full words only, e.g.sd -f w foo bar file.txt
--in-place
is now deprecated and assumed whenever a list of files is given
- Windows support (thanks to @ErichDonGubler)
- Support for unicode and special characters (like
\n
) in replacement expressions- Only in regex mode
- Fixed edge-cases when replacing content containing unescaped characters
- Significant performance improvements (see benchmarks in README)
- Option to set regex flags via
-f
or--flags
:m
(multi-line)c
(case-sensitive)i
(case-insensitive)
- Smart case-sensitivity is used by default with regular expressions
- You may now pass multiple files to
sd
- this is now valid:
sd -i "\n" "," *.txt
- this is now valid:
Breaking Change: the -i
/--input
is revamped per #1. The file path now comes at the end, instead of -i
.
Transforming the file in-place:
- Before:
sd -s 'str' '' -i file.txt'
- Now:
sd -i -s 'str' '' file.txt
- Future:
sd -i -s 'str' '' *.txt
To reflect this change, --input
is also renamed to --in-place
. This is the first and most likely the last breaking change in this project.
- Files are now written to atomically