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