26 个版本

0.8.2 2023 年 9 月 9 日
0.8.1 2022 年 11 月 12 日
0.8.0 2022 年 5 月 14 日
0.6.4 2022 年 2 月 28 日
0.1.0 2017 年 11 月 8 日

#46命令行工具

Download history 849/week @ 2024-04-20 634/week @ 2024-04-27 685/week @ 2024-05-04 645/week @ 2024-05-11 601/week @ 2024-05-18 738/week @ 2024-05-25 827/week @ 2024-06-01 586/week @ 2024-06-08 824/week @ 2024-06-15 612/week @ 2024-06-22 762/week @ 2024-06-29 572/week @ 2024-07-06 656/week @ 2024-07-13 615/week @ 2024-07-20 620/week @ 2024-07-27 655/week @ 2024-08-03

2,605 每月下载量
12crate 中使用 (直接使用 4 个)

BSD-3-Clause

42KB
927

crates.io image

Ruplacer

在源文件中查找和替换文本

$ ruplacer old new src/
Patching src/a_dir/sub/foo.txt
-- old is everywhere, old is old
++ new is everywhere, new is new

Patching src/top.txt
-- old is nice
++ new is nice

Would perform 2 replacements on 2 matching files.
Re-run ruplacer with --go to write these changes to disk

备注

该项目最初托管在 TankerHQ GitHub 组织上,该组织是我2016年至2021年的雇主。他们同意将项目的所有权归还给我。谢谢!

使用 cargo 安装

安装 rustcargo,例如使用 rustup

然后运行

cargo install ruplacer

其他安装方法

  • 适用于 Linux、macOS 和 Windows 的预编译二进制文件可作为最新版本的 资产 提供。

  • ruplacer 还可以从 homebrew 安装

brew install TankerHQ/homebrew-repo/ruplacer

基本用法

ruplacer pattern replacement [path]

如果没有指定路径,则默认为当前工作目录。

Ruplacer 将遍历 <path> 中的每个文件,同时尊重沿途找到的 .gitignore 文件。

将跳过二进制文件和包含非 UTF8 字符的文本文件。然后对于每个剩余的文件,它将读取内容,用替换文本替换所有与模式匹配的行,并打印差异。

如果您对替换满意,请重新运行带有 --go 选项的 ruplacer 以实际将更改写入磁盘。

正则表达式

默认情况下,pattern 将编译成 Rust 正则表达式

请注意,它与 Perl 风格的正则表达式略有不同。另外,您必须使用 $1$2replacement 中引用 pattern 中捕获的组。

例如,这会将 'last, first' 替换为 'first last'

ruplacer '(\w+), (\w+)' '$2 $1'

(注意使用单引号以避免被 shell 处理)

如果您不想将模式用作正则表达式,请使用 --no-regex 命令行标志。

这使得可以在不转义的情况下查找特殊字符

# This is a regex that matches the letter a
# or the letter o
$ ruplacer '(a|o)' u
- tata toto
+ tutu tutu
- (a|o)
+ (u|u)

# This is the literal string: '(a|o)'
$ ruplacer --no-regex '(a|o)' u
# or
$ ruplacer '\(a\|o|)' u
- (a|o)
+ u

反模式

Ruplacer 有一个 --subvert 选项,该选项适用于各种大小写风格(小写、snake case 等)

$ ruplacer --subvert foo_bar spam_eggs
Patching src/foo.txt
-- foo_bar, FooBar, and FOO_BAR!
++ spam_eggs, SpamEggs, and SPAM_EGGS!

按类型或 glob 模式过滤文件

ripgrep 启发,您还可以选择或忽略某些 "文件类型" 或 glob 模式

# Select only C++ files
$ ruplacer old new --type cpp
# Select only *.foo files
$ ruplacer old new --type *.foo
# Select only files that match foo*bar.c
$ ruplacer old new --type foo*bar.c

# Ignore all js files
$ ruplacer old new --type-not js
# Ignore all *.bar files
$ ruplacer old new --type-not *.bar
# Ignore all files that match foo*bar.c
$ ruplacer old new --type-not foo*bar.c

每个 "文件类型" 只是一个 glob 模式列表。例如:cpp 文件类型匹配 *.C*.H*.cc*.cpp 等 ...

您可以通过使用 ruplacer --file-types 来查看整个列表。

依赖项

~5–15MB
~168K SLoC