在保持文件名的同时使用sed重写URL

时间:2014-12-13 19:08:55

标签: regex sed

我想在文件中找到URL的所有实例,并用不同的链接结构替换它们。

示例将http://www.domain.com/wp-content/uploads/2013/03/Security_Panda.png转换为/images/Security_Panda.png

我能够使用正则表达式识别链接,例如:

^(http:)|([/|.|\w|\s])*\.(?:jpg|gif|png)

但需要使用sed重写,以便维护文件名。我知道我需要使用s/${PATTERN}/${REPLACEMENT}/g

尝试:sed -i 's#(http:)|([/|.|\w|\s])*\.(?:jpg|gif|png)#/dir/$1#g' test没有成功?关于如何改进方法的想法?

5 个答案:

答案 0 :(得分:1)

在基本sed中,您需要将()符号转义为\(..\),以表示捕获组。

sed 's~http://[.a-zA-Z0-9_/-]*\/\(\w\+\.\(jpg\|gif\|png\)\)~/images/\1~g' file

示例:

$ echo 'http://www.domain.com/wp-content/uploads/2013/03/Security_Panda.png' | sed 's~http://[.a-zA-Z0-9_/-]*\/\(\w\+\.\(jpg\|gif\|png\)\)~/images/\1~g'
/images/Security_Panda.png

答案 1 :(得分:1)

您可以使用:

sed 's~^.*/\([^/]\{1,\}\)$~/images/\1~' file
/images/Security_Panda.png

<强>测试

s='http://www.domain.com/wp-content/uploads/2013/03/Security_Panda.png'
sed 's~^.*/\([^/]\{1,\}\)$~/images/\1~' <<< "$s"
/images/Security_Panda.png

答案 2 :(得分:0)

如果你改变了想法,那就更容易了。

#!/usr/bin/env bash

URL="http://www.domain.com/wp-content/uploads/2013/03/Security_Panda.png"
echo "/image/${URL##*/}"

答案 3 :(得分:0)

另一种方式

命令行

sed 's#^http:.*/\(.*\).$#/images/\1#g'

实施例

 echo "http://www.domain.com/wp-content/uploads/2013/03/Security_Panda.png "|sed 's#^http:.*/\(.*\).$#/images/\1#g'

结果

/images/Security_Panda.png

答案 4 :(得分:0)

awk版本:

awk -F\/  '/(jpg|gif|png) *$/ {print "/images/"$NF}' file
/images/Security_Panda.png