如何将'index.html'附加到html文件中不以该字词结尾的所有链接?
因此,例如,href="http://mysite/"
将成为href="http://mysite/index.html"
。
答案 0 :(得分:0)
我不是sed专家,但认为这有效:
sed -e "s_\"\(http://[^\"]*\)/index.html\"_\"\1\"_g" \
-e "s_\"\(http://[^\"]*[^/]\)/*\"_\"\1/index.html\"_g"
第一个替换发现已在/index.html
中结束的URL已删除此结尾。
第二次替换会根据需要添加/index.html
。它处理以/
结尾的案例以及不符合案件的案件。
存在多个版本的sed。我正在使用XCode for OS X中的那个。
答案 1 :(得分:0)
这个怎么样:
echo 'href="http://mysite/"' | awk '/http/ {sub(/\/\"/,"/index.html\"")}1'
href="http://mysite/index.html"
echo 'href="http://www.google.com/"' | awk '/http/ {sub(/\/\"/,"/index.html\"")}1'
href="http://www.google.com/index.html"
答案 2 :(得分:0)
以href结尾/
sed '\|href="http://.*/| s||\1index.html' YourFile
如果有文件夹引用没有结束/,你应该指定什么是文件或不符合(如文件中带有点的姓氏,...)
答案 3 :(得分:0)
一般来说,这是一个几乎无法解决的问题。如果你的html表现良好",则下面的表达式会搜索"看起来很像URL&#34 ;;你可以在http://regex101.com/r/bZ9mR8处看到它(这显示了几个例子的搜索和替换;它应该适用于大多数其他例子)
((?:(?:https?|ftp):\/{2})(?:(?:[0-9a-z_@-]+\.)+(?:[0-9a-z]){2,4})?(?:(?:\/(?:[~0-9a-z\#\+\%\@\.\/_-]+))?\/)*(?=\s|\"))(\/)?(index\.html?)?
上述匹配的结果应替换为
\1index.html
不幸的是,这需要正则表达式魔法,这远远超出sed
的行人能力,因此您必须unleash the power of perl
,如下所示:
perl -p -e '((?:(?:https?|ftp):\/{2})(?:(?:[0-9a-z_@-]+\.)+(?:[0-9a-z]){2,4})?(?:(?:\/(?:[~0-9a-z\#\+\%\@\.\/_-]+))?\/)*(?=\s|\"))(\/)?(index\.html?)?/\index.html/gi'
我知道这看起来有点令人生畏。但它的确有效。唯一的问题 - 如果链接在/
中结束,则会添加/index.html
。您可以轻松获取上述输出并使用
sed 's/\/\/index.html/\/index.html/g'
使用单个反斜杠替换double-backslash-before-index.html ...
一些例子(上面的链接中给出了几个例子)
http://www.index.com/ add /index.html
http://ex.com/a/b/" add /index.html
http://www.example.com add /index.html
http://www.example.com/something do nothing
http://www.example.com/something/ add /index.html
http://www.example.com/something/index.html do nothing