Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 更改.html文件中的部分链接_String_Bash_Replace_Sed_Awk - Fatal编程技术网

String 更改.html文件中的部分链接

String 更改.html文件中的部分链接,string,bash,replace,sed,awk,String,Bash,Replace,Sed,Awk,我目前正在将mediawiki迁移到sharepoint 我已经创建了wiki页面的转储,现在正在修改文件,以便无缝导入sharepoint wiki 剩下的最后一个问题是页面的地址已更改,因此.html文件中的链接将不再有效 链接当前的格式如下: ../../../a/b/c/sitename.html 我想要的格式是: http://host/sites/site/wiki/sitename.aspx 我可以用sed替换第一部分(。/../a/b/c/) 我面临的问题在于第二部分(sit

我目前正在将mediawiki迁移到sharepoint

我已经创建了wiki页面的转储,现在正在修改文件,以便无缝导入sharepoint wiki

剩下的最后一个问题是页面的地址已更改,因此.html文件中的链接将不再有效

链接当前的格式如下:

../../../a/b/c/sitename.html
我想要的格式是:

http://host/sites/site/wiki/sitename.aspx
我可以用
sed
替换第一部分(
。/../a/b/c/


我面临的问题在于第二部分(
sitename.html
)。我想保留
sitename
,但将
.html
扩展名替换为
.aspx
。所使用的方法应适用于不同的站点名称,这样我就不必为每个站点名称添加额外的
sed
命令。

单向使用
awk

awk -F/ '/\.html/{sub(/\..*/,"",$NF); print "http://host/sites/site/wiki/"$NF".aspx"}' htmlfile

带awk的单向开关:

awk -F/ '/\.html/{sub(/\..*/,"",$NF); print "http://host/sites/site/wiki/"$NF".aspx"}' htmlfile
试试这个GNU-sed

echo "../../../a/b/c/whateversitename.html" | sed 's#\(../../../a/b/c/\)\(.*\)\.html#http://host/sites/site/wiki/\2.aspx#g'
试试这个GNU-sed

echo "../../../a/b/c/whateversitename.html" | sed 's#\(../../../a/b/c/\)\(.*\)\.html#http://host/sites/site/wiki/\2.aspx#g'

sed
可以处理多个表达式,因此如果您使用的是一个
sed
,您只需向该表达式添加另一个表达式,而不是另一个
sed

[[bash_prompt$]]$ cat log
../../../a/b/c/sitename.html
[[bash_prompt$]]$ sed -e 's#../../../a/b/c#http://host/sites/site/wiki#g'  \
>  -e 's#html$#aspx#g' log
http://host/sites/site/wiki/sitename.aspx
在单个表达式中添加

[[bash_prompt$]]$sed -e 's#../.*/\([^.]*\).html#http://host/sites/site/wiki/\1.aspx#g' log
http://host/sites/site/wiki/sitename.aspx

sed
可以处理多个表达式,因此如果您使用的是一个
sed
,您只需向该表达式添加另一个表达式,而不是另一个
sed

[[bash_prompt$]]$ cat log
../../../a/b/c/sitename.html
[[bash_prompt$]]$ sed -e 's#../../../a/b/c#http://host/sites/site/wiki#g'  \
>  -e 's#html$#aspx#g' log
http://host/sites/site/wiki/sitename.aspx
在单个表达式中添加

[[bash_prompt$]]$sed -e 's#../.*/\([^.]*\).html#http://host/sites/site/wiki/\1.aspx#g' log
http://host/sites/site/wiki/sitename.aspx

是否有其他外观类似的URL,如
./../../a/b/c/not-a-sitename.html
中的
.html
后缀需要保持不变?是否有其他外观类似的URL,如
./../a/b/c/not-a-sitename.html
中的
.html
后缀需要保持不变?