sed命令可高效批量修改linux文本文件:一、基础替换(s命令,g标志全局替换);二、就地编辑(-i选项,支持备份);三、多文件处理(通配符或find);四、变量动态替换;五、正则增强匹配。

如果您需要在Linux系统中批量修改文本文件内容,直接编辑每个文件效率低下。sed命令提供了一种无需打开文件即可完成查找与替换的高效方式。以下是实现该目标的具体操作方法:
一、基础替换语法
sed默认以行为单位处理文本,使用s(substitute)命令执行字符串替换,适用于单行内精确匹配和替换。该方法不修改原文件,仅输出结果到终端,适合预览效果。
1、输入命令:sed 's/旧字符串/新字符串/' 文件名
2、若需全局替换每行中所有匹配项,添加g标志:sed 's/旧字符串/新字符串/g' 文件名
3、若仅替换每行第n次出现的匹配项,将g替换为数字,例如:sed 's/旧字符串/新字符串/2' 文件名
二、就地编辑文件
使用-i选项可直接修改原始文件内容,避免手动重定向输出。此操作不可逆,建议操作前备份关键文件。
1、执行就地替换:sed -i 's/旧字符串/新字符串/g' 文件名
2、保留原始文件副本,后缀加.bak:sed -i.bak 's/旧字符串/新字符串/g' 文件名
3、若替换内容含斜杠,可用其他分隔符替代,如#:sed -i 's#/path/old#/path/new#g' 文件名
三、跨多文件批量处理
结合shell通配符或find命令,可对目录下多个文件统一执行替换,适用于配置文件批量更新场景。
1、对当前目录所有.txt文件执行替换:sed -i 's/旧字符串/新字符串/g' *.txt
2、递归处理子目录中所有匹配文件:find ./ -name "*.conf" -exec sed -i 's/old_value/new_value/g' {} \;
3、限制只处理普通文件(排除目录和设备文件):find ./ -type f -name "settings.py" -exec sed -i 's/DEBUG = True/DEBUG = False/g' {} \;
四、使用变量动态替换
在脚本中嵌入变量可提升灵活性,使同一段命令适配不同替换需求,避免硬编码字符串。
1、定义变量并引用:OLD="apple"; NEW="orange"; sed "s/$OLD/$NEW/g" fruit.txt
2、注意双引号允许变量展开,单引号则禁止;含空格或特殊字符时需额外转义。
3、在循环中批量应用:for file in *.log; do sed -i "s/$1/$2/g" "$file"; done
五、正则表达式增强匹配
利用sed支持的基础正则语法,可实现模糊匹配与上下文感知替换,例如替换带数字编号的行或特定格式字段。
1、替换以“ID:”开头后跟数字的内容:sed -i 's/ID:[0-9]\+/ID:999/g' data.txt
2、匹配并替换包含任意空白字符的模式:sed -i 's/ \+/ /g' text.md
3、删除行首空格并替换关键词:sed -i 's/^[[:space:]]*//; s/enable/disable/g' config.ini










