sed是Linux批量修改文本字符串的高效工具,涵盖基础替换、分隔符切换、行首行尾/单词边界匹配、正则模式替换及多条件脚本化处理五类方法。

如果您需要在Linux系统中批量修改文本文件中的字符串,sed命令是最常用且高效的工具之一。以下是多种基于sed的进阶替换方法,适用于不同场景下的文本内容替换需求:
一、基础全局替换(单文件)
该方法用于在单个文件内将所有匹配的字符串替换为新字符串,不修改原文件,仅输出结果。
1、执行命令:sed 's/旧字符串/新字符串/g' 文件名
2、若需保存修改结果到新文件:sed 's/旧字符串/新字符串/g' 原文件 > 新文件
3、如需直接修改原文件并备份原始文件:sed -i.bak 's/旧字符串/新字符串/g' 文件名
二、使用分隔符避免转义冲突
当待替换的字符串中包含斜杠“/”时,使用默认分隔符会导致语法错误,此时可更换为其他字符作为分隔符以简化表达式。
1、用竖线“|”替代斜杠:sed 's|/path/to/old|/new/path|g' file.txt
2、用下划线“_”替代斜杠:sed 's_/usr/bin_/opt/bin_g' config.conf
3、用井号“#”替代斜杠:sed 's#http://example.com#https://new-site.org#g' urls.txt
三、匹配行首行尾及单词边界
为避免误替换子字符串,可借助锚点和边界符号精确控制匹配范围,确保只替换完整单词或特定位置的内容。
1、仅替换行首出现的字符串:sed 's/^旧字符串/新字符串/' file.txt
2、仅替换行尾出现的字符串:sed 's/旧字符串$/新字符串/' file.txt
3、仅替换独立单词(前后均为非字母数字字符或边界):sed 's/\b旧字符串\b/新字符串/g' file.txt
四、结合正则表达式进行模式化替换
sed支持基础正则表达式,可用于替换符合某种模式的动态内容,例如数字序列、日期格式或IP地址片段。
1、替换所有连续数字为固定字符串:sed 's/[0-9]\+/NUMBER/g' data.log
2、替换形如“2023-01-01”的日期为“[DATE]”:sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/[DATE]/g' report.txt
3、替换IPv4地址中的第一个字节为“XXX”:sed 's/^[0-9]\{1,3\}\./XXX./' network.conf
五、多条件组合与脚本化批量处理
对于多个替换规则或跨多个文件的操作,可通过编写sed脚本或使用-e选项串联多个命令,提升效率与可维护性。
1、在同一命令中执行多个替换:sed -e 's/abc/def/g' -e 's/xyz/uvw/g' -e 's/123/456/g' input.txt
2、将替换规则写入脚本文件replace.sed,内容如下:s/模式1/替换1/g
s/模式2/替换2/g
s/模式3/替换3/g
3、调用脚本处理文件:sed -f replace.sed source.txt > result.txt










