如何使用SED将URL中的下划线替换为连字符?

如何使用SED将URL中的下划线替换为连字符?,sed,Sed,嗨,这看起来像是一个常见的问题,但我无法通过谷歌搜索找到解决方案。在本地目录中保存的几个HTML文件中,我需要将URL从在URL的结尾部分使用下划线改为使用连字符。(任何其他URL都需要保持不变。)我使用Ubuntu Linux,我认为SED在这里对我有用,但如果有用的话,可以使用其他工具 因此,如果HTML文件包括: <a href="http://www.myblog.com/my_blog_article">...</a> 我需要切换到: <a href

嗨,这看起来像是一个常见的问题,但我无法通过谷歌搜索找到解决方案。在本地目录中保存的几个HTML文件中,我需要将URL从在URL的结尾部分使用下划线改为使用连字符。(任何其他URL都需要保持不变。)我使用Ubuntu Linux,我认为SED在这里对我有用,但如果有用的话,可以使用其他工具

因此,如果HTML文件包括:

<a href="http://www.myblog.com/my_blog_article">...</a>

我需要切换到:

<a href="http://www.myblog.com/my-blog-article">...</a>


问题中的URL将仅出现在HTML锚标记中。此外,下划线到连字符部分将仅出现在结尾部分(即URL字符串中最后一个“/”之后)。我不能只进行全局搜索和替换(s//-/g),因为可能存在指向其他站点的URL以及与我不想更改的URL无关的其他下划线。

您可以使用
awk

awk -F\" '{for (i=1;i<=NF;i++) if ($i~/http/) {n=split($i,a,"/");gsub(/_/,"-",a[n]);for (j=1;j<=n;j++) {s=s (s?"/":"") a[j];$i=s}}print $0}' OFS=\" file
<a href="http://www.myblog.com/my-blog-article">data with_underscore</a>
这可能适用于您(GNU-sed):


sed-r:a/由于
sed
s替换基于正则表达式(regex),搜索有关这些命令的帮助可能会比专门查找
sed
命令获得更好的结果,尽管知道您正在使用
sed
将有助于您注意其特定的正则表达式功能。这听起来有点太不精确:如果一行包含URL和带有下划线的单独单词呢?谢谢,我正在测试这个。问题:如果我在“temp”文件夹中有15个html文件,有没有一种好方法可以将所有15个文件都提供给这个awk命令,并让它创建15个输出文件(无论是不同的名称还是覆盖,我不在乎)和结果?您可以在
bash
程序中使用
while loop
,通过给定的文件列表进行循环。
awk -F\" '
    {for (i=1;i<=NF;i++)
        if ($i~/http/) {
            n=split($i,a,"/")
            gsub(/_/,"-",a[n])
            for (j=1;j<=n;j++) {
                s=s (s?"/":"") a[j]
                $i=s}
            }
        print $0
    }' OFS=\" file
sed -r ':a;/<a href="http:\/\/www.myblog.com\/[^"]*_[^"]*"/{s//\n&\n/;h;y/_/-/;G;s/.*\n(.*)\n.*\n(.*)\n.*\n/\2\1/;ba}' file