【Linux系列】Linux 中替换文件中的字符串
博客目录
- 方法一:使用 `sed` 命令 (推荐用于脚本和快速替换)
- 1. 基本语法(替换单个文件)
- 2. 常用示例
- 方法二:使用 `vim` 编辑器 (推荐用于交互式复杂编辑)
- 1. 基本替换语法(在 vim 内)
- 2. 常用示例与技巧
方法一:使用 sed
命令 (推荐用于脚本和快速替换)
sed
(Stream Editor) 是专门为解析和转换文本而设计的命令行工具,非常适合批量替换。
1. 基本语法(替换单个文件)
sed -i 's/原字符串/新字符串/g' 文件名
-i
:最重要的选项,代表“就地(in-place)”编辑。没有它,sed
只会将结果打印到屏幕,而不会修改原文件。使用-i
一定要先备份或确认命令无误!s
:表示替换操作(substitute)。/
:是分隔符,也可以用其他字符,如#
或|
,当原字符串或新字符串中包含/
时特别有用。(例如:sed -i 's#/old/path#/new/path#g' file.txt
)g
:表示全局替换(global)。如果没有g
,则只替换每行中第一个匹配的字符串。
2. 常用示例
-
将
file.txt
中所有的foo
替换为bar
:sed -i 's/foo/bar/g' file.txt
-
只替换每行第一个匹配的
foo
(去掉g
选项):sed -i 's/foo/bar/' file.txt
-
删除所有空行(将空行替换为空):
sed -i '/^$/d' file.txt # 注意:这里使用了删除命令 `d`,而不是替换 `s`
-
替换包含特殊字符的字符串(如路径),使用不同的分隔符:
sed -i 's#/home/user#/data/user#g' file.txt
-
**安全做法:先测试,再替换(不加
-i
先看效果)**sed 's/foo/bar/g' file.txt # 只输出到屏幕,原文件不变 # 确认输出无误后,再运行带 -i 的命令 sed -i 's/foo/bar/g' file.txt
-
备份原文件后再替换(给
-i
添加扩展名,如.bak
)sed -i.bak 's/foo/bar/g' file.txt
这会将原文件备份为
file.txt.bak
,并修改file.txt
。
方法二:使用 vim
编辑器 (推荐用于交互式复杂编辑)
如果你需要更复杂的编辑,或者想一边查看一边确认,vim
是完美的选择。
1. 基本替换语法(在 vim 内)
打开文件后,在命令模式下输入:
:%s/原字符串/新字符串/g
:
:进入命令行模式。%
:表示范围是整个文件(% 代表所有行)。也可以指定行范围,如:10,20s/foo/bar/g
只替换第 10 到 20 行。s
:替换操作。g
:全局替换。
2. 常用示例与技巧
-
替换前逐个确认(非常安全!)
在命令后添加c
(confirm)::%s/foo/bar/gc
Vim 会为每个匹配项提示你:
y
: 替换 (yes)n
: 不替换 (no)a
: 替换所有 (all)q
: 退出 (quit)l
: 替换当前一个然后退出 (last)
-
忽略大小写:
:%s/foo/bar/gi # 添加 `i` (ignore case) 选项,会匹配 FOO, Foo, fOO 等
-
替换时要求整词匹配(避免替换
football
中的foo
)::%s/\<foo\>/bar/g # \< 和 \> 分别代表单词的开头和结尾
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙