我想在文件中找到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
没有成功?关于如何改进方法的想法?
答案 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