如何使用sed命令精确匹配替换rohit.com为goyal.com?
问题解决:用sed精准替换独立的rohit.com
问题分析
你当前的命令存在两个核心问题:
- 未转义
.:正则表达式中.是通配符,会匹配任意字符,正确写法应为rohit\.com; \b单词边界不适用:\b匹配单词字符(字母/数字/下划线)与非单词字符的边界,导致1.rohit.com里的.和r之间、rohit.com.abc里的m和.之间都被识别为边界,从而错误触发替换。
结合你的期望输出,需要只替换被空白字符包围(或在行尾)、且前面有非空白配置项的rohit.com,同时排除子域名、后缀拼接的情况,以及单独一行的rohit.com。
解决方案
使用以下sed命令即可实现需求:
sed -E 's/\srohit\.com(\s|$)/ goyal.com\1/' a.txt
命令解释
-E:启用扩展正则表达式,简化语法;\s:匹配任意空白字符(空格、制表符等),确保rohit.com前面是空白,排除子域名(如1.rohit.com)的情况;rohit\.com:转义.,精准匹配目标字符串;(\s|$):匹配后面的空白字符或行尾,确保rohit.com后面没有其他字符(如rohit.coma、rohit.com.abc);goyal.com\1:替换为目标字符串,并保留原来的空白/行尾(\1引用前面括号里的匹配内容)。
执行后输出将完全符合你的期望:
ServerAdmin webmaster@localhost ServerName goyal.com 1.rohit.com rohit.coma rohit.com.abc ServerAlias goyal.com rohit.com
内容的提问来源于stack exchange,提问作者ROHIT GOYAL
相关产品推荐
相关产品推荐

