2014-12-13 55 views
0

我想查找一個URL中的所有實例並替換爲不同的鏈接結構。使用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沒有成功?關於如何改進方法的思考?

回答

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

您可以使用:

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 
0

更簡單的方法。

#!/usr/bin/env bash 

URL="http://www.domain.com/wp-content/uploads/2013/03/Security_Panda.png" 
echo "/image/${URL##*/}" 
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 
+0

這將修改所有'http'網址,而不是隻圖像鏈接'JPG | GIF | png' – Jotne 2014-12-14 09:57:27

0

awk版本:

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