嗨,这看起来像是一个常见问题,但我无法通过谷歌搜索或SO找到解决方案。在保存在本地目录中的几个HTML文件中,我需要将URL从http://www.myblog.com更改为使用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>
相关网址仅会出现在HTML锚标记中。此外,下划线到连字符部分将仅出现在结尾部分(即,在URL字符串中的最后一个“/”之后)。我不能只进行全局搜索和替换(s / _ / - / g)因为其他网站可能存在URL,而其他下划线与我不想改变的URL无关。
答案 0 :(得分:0)
您可以使用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>
这只会在_
url
更易阅读的版本:
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
答案 1 :(得分:0)
这可能适合你(GNU sed):
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
如果某行包含问题中显示的网址,请按标记包围网址(在这种情况下为换行符),复制该行,然后将&#39; _&#39;&#39;转换为&# 39; - &#39;&#39; S。附加原始线并使用标记作为参考线重新组装。重复此过程,直到处理完所有网址。