vi中的替换

本文详细介绍了Vi编辑器中替换命令的使用方法,包括命令的基本结构、执行范围的指定方式及如何利用正则表达式实现精确替换。此外还解释了g和i等标志的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令模式下:
Vi的替换命令:
  • : range s/ pat1 / pat2 /[g][i]
其中
  • : 这是Vi的命令执行界面。
  • range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。
  • s 表示其后是一个替换命令。
  • pat1 这是要查找的一个正则表达式
  • pat2 这是希望把匹配串变成的模式的正则表达式
  • g 可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串
  • i可选标志,带这个标志表示忽略大小写匹配

参考:正则表达式之道
以前一直不知道怎么替换
### vi 编辑器中的批量替换操作 在 `vi` 或 `vim` 编辑器中,可以通过内置的正则表达式功能来执行高效的批量替换操作。以下是具体方法: #### 使用全局替换命令 `%s` 最常用的批量替换方式是通过 `:%s` 命令完成。该命令的基本语法如下: ```bash :%s/旧文本/新文本/g ``` 其中: - `:` 表示进入底行模式(EX Mode)。 - `%` 表示作用于整个文件的所有行。 - `s` 是 substitute 的缩写,表示替换操作。 - `/旧文本/新文本/` 定义了要被替换的内容及其替换成的新内容。 - `g` 表示全局替换,在每行中找到的所有匹配项都会被替换。 如果不想在整个文件范围内进行替换,可以用具体的行号范围代替 `%`。例如,仅替换第 1 到第 10 行的内容: ```bash :1,10s/旧文本/新文本/g ``` 为了更灵活地定义分隔符,可以使用其他字符替代默认的斜杠 `/`。例如,当涉及路径名或其他包含斜杠的字符串时,可以选择 `@` 或 `#` 作为分隔符[^3]: ```bash :%s@旧文本@新文本@g ``` #### 手动逐个替换 除了自动化的全局替换外,还可以手动逐一确认并替换特定的实例。步骤如下: 1. 搜索目标字符串:按下 `/` 键,输入待替换的字符串,回车后跳至第一个匹配位置。 2. 替换单词:按 `c` 和 `w` 组合键 (`cw`) 开始修改当前单词为新的内容。 3. 移动到下一个匹配项:按 `n` 跳转到下一处匹配;按 `N` 返回上一处匹配。 4. 确认替换完成后,按 `.` 来重复最近的一次更改动作[^4]。 #### 特殊情况下的处理 对于一些特殊场景,比如去除多余的换行符或者 Windows 风格的回车符 `\r`,可以直接利用以下命令实现清理工作[^2]: ```bash :%s/^V^M//g ``` 需要注意的是,某些情况下可能需要借助外部工具如 `tr` 实现更为复杂的转换逻辑。例如: ```bash tr -d "\r" < src > dest ``` 以上就是在 Vi/Vim 中实施高效批量化文字替换的主要手段之一[^1]。 ### 示例代码 假设有一个文件 content.txt ,其内容如下: ``` apple pie is tasty. banana bread is also good. I like apple and banana both. ``` 我们希望把所有的 “apple” 替换为 “orange”。那么可以在 Vim 中运行下面这条指令: ```bash :%s/apple/orange/g ``` 最终得到的结果将是: ``` orange pie is tasty. banana bread is also good. I like orange and banana both. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值