在linux上搜索和替换文件(正则表达式)

时间:2011-12-16 16:21:17

标签: regex search replace

我有大约50个html文件,需要在所有文件中搜索和替换图像缩放器网址

目前的网址是这样的: http://www.test1.com/showimage.php?fileUrl=/uploads/images/5x6a6s9d7a9s7d8a9.jpg&mode=resizeByMinSize,cropToSize&cropPosition=topleft&width=64&height=64esizeByMinSize,cropToSize&cropPosition=topleft&width=64&height=64

我想要的是:

1:
找到:http://www.test1.com/showimage.php?fileUrl=
替换为:/resizer/phpThumb.php?src =

2:
删除:& mode = resizeByMinSize,cropToSize& cropPosition = topleft

3:
找到:& width =
替换为:& w =

4:
找到:& height =
替换为:& h =

5:
将此添加到图像的末尾url:& far = C& q = 85& zc = C

编辑:
此示例网址的输出应为:
/resizer/phpThumb.php?src=/uploads/images/5x6a6s9d7a9s7d8a9.jpg&w=64&h=64&far=C&q=85&zc=C

由于

2 个答案:

答案 0 :(得分:2)

我将假设您的示例网址中间缺少一个片段。我认为以下sed脚本可能满足您的需求:

sed -e 's-http://www.test1.com/showimage.php?fileUrl=-/resizer/phpThumb.php?src=-; s/&mode=resizeByMinSize,cropToSize&cropPosition=topleft//; s/&width=/\&w=/g; s/&height=/\&h=/g; s/$/\&far=C\&q=85\&zc=C/;' /tmp/y.txt

答案 1 :(得分:1)

您的网址上面可能存在拼写错误,在第2点您要删除&mode=resizeByMinSize,cropToSize&cropPosition=topleft,但您忘记提及如何处理esizeByMinSize,cropToSize&cropPosition=topleft ...

无论如何,下面的awk脚本解决了这个问题:根据你的需要调整它:

# replace 'www' below with a better pattern
/www/ {
    sub(/http:\/\/www\.test1\.com\/showimage\.php\?fileUrl=/, "/resizer/phpThumb.php?src=")

    gsub(/&mode=resizeByMinSize,cropToSize&cropPosition=topleft/, "")
    gsub(/&width=/, "\\&w=")
    gsub("&height=", "\\&h=")
    $0 = $0 "&far=C&q=85&zc=C"
    print
}

引用有点乱,请参阅awk-manual 将其包裹在find序列中,您的问题就解决了。