【问题标题】:search and replace in files on linux (regex)在 Linux 上的文件中搜索和替换(正则表达式)
【发布时间】:2011-12-16 16:21:17
【问题描述】:

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

当前网址是这样的: 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:
将此添加到图像网址的末尾:&far=C&q=85&zc=C

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

谢谢

【问题讨论】:

  • sed 可能不是完成这项任务的最佳工具,尽管 sed 可以做到。你试过什么?
  • awk 更适合逐行解析片段,但如果您使用简单的脚本语言(如 python php perl 或 ruby​​)会更好。
  • @Fredrik:我没有使用 SED 的冲动,我只是在寻找一种在 linux 命令行中执行此操作的简单方法。如果我对这个搜索/替换没有错,我必须运行多个命令,并且不可能在一行中完成所有 5 个步骤......对吗?
  • @JazzMan:嗯,我知道 PHP,是的,在 PHP 中做到这一点并不难,感谢您的建议:D

标签: regex search replace


【解决方案1】:

我将假设您的示例网址在中间缺少一个片段。我认为以下 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

【讨论】:

    【解决方案2】:

    上面的 url 中可能有一个错字,在第 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 将其包装在 findsequence 中,您的问题就解决了。

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多