替换网址中的所有域名

时间:2018-07-27 18:05:56

标签: bash sed replace

假设我有一个这样的站点地图文件:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
       <loc>https://www.sampledomain.com/foo.html</loc>
       <changefreq>weekly</changefreq>
       <priority>0.7</priority>
    </url>
    <url>
       <loc>https://www.anotherdomain.nl/hello.html</loc>
       <changefreq>weekly</changefreq>
       <priority>0.3</priority>
    </url>
    ...
</urlset>

我想将所有URL(未硬编码为 www.sampledomain.com www.anotherdomain.nl )替换为 www.mynewwebsite.org ,而不更改文件夹/页面路径。

使用bash可以吗?

编辑: 所需的输出:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
       <loc>https://www.mynewwebsite.org/foo.html</loc>
       <changefreq>weekly</changefreq>
       <priority>0.7</priority>
    </url>
    <url>
       <loc>https://www.mynewwebsite.org/hello.html</loc>
       <changefreq>weekly</changefreq>
       <priority>0.3</priority>
    </url>
    ...
</urlset>

1 个答案:

答案 0 :(得分:4)

以下sed命令仅在<loc>标签内应用替换:

sed 's@<loc>.*www.\w*\.\w*/@<loc>https://www.mynewwebsite.org/@' inputfile

在这种情况下,将@用作sed的分隔符非常有用,因为我们不必转义斜杠。对于您的输入文件,将产生以下输出:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">                             
    <url>                                                                
       <loc>https://www.mynewwebsite.org/foo.html</loc>                           
       <changefreq>weekly</changefreq>                                   
       <priority>0.7</priority>                                          
    </url>                                                               
    <url>                                                                
       <loc>https://www.mynewwebsite.org/hello.html</loc>   
       <changefreq>weekly</changefreq>
       <priority>0.3</priority>
    </url>
    ...
</urlset>