使用通配符将文件中的所有子域名替换为不同的域名。
例如:在一个文件中,我有以下域:
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
正则表达式不知道+
,因此请确保添加-r
以sed
使用扩展正则表达式。
另外,请确保使用引号!否则*
可能会被 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 是一个新字符串。