在 CentOS(或其他 Linux 系统)中,替换文本内容常见有几种方式,取决于你是替换单个文件、批量替换,还是命令行输出。下面按常见场景说明:
sed)sed -i 's/旧内容/新内容/g' 文件名
示例:
sed -i 's/foo/bar/g' test.txt
把
test.txt中所有的foo替换为bar
⚠️ 注意:
-i 会直接修改原文件sed 必须写 -i,不能像 macOS 那样 -i ''sed -i 's/旧内容/新内容/' 文件名
sed -i '5s/旧内容/新内容/' 文件名
只替换第 5 行
如果内容里有 /、.、* 等,要用其他分隔符:
sed -i 's|/old/path|/new/path|g' file.txt
或使用转义:
sed -i 's/\/old\/path/\/new\/path/g' file.txt
.txt 文件sed -i 's/旧内容/新内容/g' *.txt
grep -rl '旧内容' /path/to/dir | xargs sed -i 's/旧内容/新内容/g'
示例:
grep -rl 'foo' /var/www | xargs sed -i 's/foo/bar/g'
sed -i.bak 's/旧内容/新内容/g' file.txt
会生成 file.txt.bak 备份文件
sed 's/旧内容/新内容/g' file.txt
vim file.txt
:%s/旧内容/新内容/gc
c = 每次替换前确认awk(适合复杂逻辑)awk '{gsub(/旧内容/,"新内容")}1' file.txt > new.txt
如果你能告诉我:
我可以给你更精确的命令。