使用 sed 和通配符将文件中的所有子域名替换为另一个域名

使用 sed 和通配符将文件中的所有子域名替换为另一个域名

使用通配符将文件中的所有子域名替换为不同的域名。

例如:在一个文件中,我有以下域:

example1.domain1.com    
example2.domain1.com 
example3.domain1.com

我想将这些子域名替换为域名2.com。我尝试使用下面的 sed 命令。如果文件较小,它工作正常。但对于大文件,命令执行似乎永远不会结束。我想在这里使用通配符,因为要替换的文本具有相同的域名,即 domain1.com。

sed -i s/.*.domain1.com/domain2.com/g test.txt

答案1

如果你使用.*.domain1.com作为模式,你将会匹配不需要的字符,因为这.意味着任何字符。
您只想使用 替换“单词字符”(ASCII 字母、数字或下划线)\w+

由于普通sed正则表达式不知道+,因此请确保添加-rsed使用扩展正则表达式。

另外,请确保使用引号!否则*可能会被 bash 解释。
并且您应该.在模式中转义,否则它也会匹配任何字符。

sed -i.bak -r 's/\w+\.domain1\.com/domain2.com/g' file

答案2

使用sed -i 's/domain1/domain2/' infile

如果要替换*.domain1.com则更改如下:

sed 's/.*domain1/domain2/' infile

确保第一次尝试时不要使用-i在文件中就地替换的内容。

答案3

在 vi 编辑器中打开文件。然后在 vi 编辑器的行模式下输入以下命令:

#vi file_name 
example1.domain1.com
example2.domain1.com 
example3.domain1.com

:%s/domain1/domain2/g  hit enter now

完毕!!

注意:domain1 是已经存在的字符串。domain2 是一个新字符串。

相关内容