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 在 命令行工具
2,605 每月下载量
在 12 个 crate 中使用 (直接使用 4 个)
42KB
927 行
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 安装
安装 rust
和 cargo
,例如使用 rustup。
然后运行
cargo install ruplacer
其他安装方法
-
适用于 Linux、macOS 和 Windows 的预编译二进制文件可作为最新版本的 资产 提供。
-
ruplacer
还可以从homebrew
安装
brew install TankerHQ/homebrew-repo/ruplacer
ruplacer
也在 Arch Linux 用户仓库 上
基本用法
ruplacer pattern replacement [path]
如果没有指定路径,则默认为当前工作目录。
Ruplacer 将遍历 <path>
中的每个文件,同时尊重沿途找到的 .gitignore
文件。
将跳过二进制文件和包含非 UTF8 字符的文本文件。然后对于每个剩余的文件,它将读取内容,用替换文本替换所有与模式匹配的行,并打印差异。
如果您对替换满意,请重新运行带有 --go
选项的 ruplacer
以实际将更改写入磁盘。
正则表达式
默认情况下,pattern
将编译成 Rust 正则表达式。
请注意,它与 Perl 风格的正则表达式略有不同。另外,您必须使用 $1
、$2
在 replacement
中引用 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