【问题标题】:sed remove '_ipx/xxx/' from "/_ipx/xxx/images/img.webp" [duplicate]sed 从 \"/_ipx/xxx/images/img.webp\" 中删除 \'_ipx/xxx/\' [重复]
【发布时间】:2022-09-26 04:40:44
【问题描述】:

我试图找出使用sed 来替换_ipx/xxx/ 的正则表达式命令,所以src 最终只是images/logo.webp

例如,如果我在index.html 中有以下 img 标签:

<img src=\"/_ipx/w_253,f_webp,q_80/images/img.webp\"
alt=\"Testing a Custom Component\"
sizes=\"(max-width: 640px) 100vw, 33vw\"
srcset=\"/_ipx/w_640,f_webp,q_80/images/img.webp 640w, /_ipx/w_253,f_webp,q_80/images/img.webp 253w\" />

我希望 sed 将其替换为:

<img src=\"/images/img.webp\"
alt=\"Testing a Custom Component\"
sizes=\"(max-width: 640px) 100vw, 33vw\"
srcset=\"/images/img.webp 640w, /images/img.webp 253w\" />

根据https://regex101.com,我认为应该这样做:/_ipx\\/.+?\\//gi。但是,当我尝试使用它时,什么也没有发生:

sed -i \'\' -e \'s/_ipx\\/.+?\\//test/gi\' index.html

  • 基本问题是您正在尝试使用带有sed 的 PCRE 正则表达式,它不接受这种现代正则表达式方言。特别是,sed 不支持非贪婪的.+?

标签: regex sed


【解决方案1】:

你可以使用这个sed 命令:

sed 's~/_ipx/[^/]*~~g' index.html

<img src="/images/img.webp"
alt="Testing a Custom Component"
sizes="(max-width: 640px) 100vw, 33vw"
srcset="/images/img.webp 640w, /images/img.webp 253w" />

但是请记住,它将在任何地方替换/_ipx/...,而不仅仅是在少数属性中。

要仅在 srcsrcset 属性内保留替换,请使用:

sed -E -e ':a' -e 's~((srcset|src)="[^"]*)/_ipx/[^/]*~\1~g;ta' index.html

<img src="/images/img.webp"
alt="Testing a Custom Component"
sizes="(max-width: 640px) 100vw, 33vw"
srcset="/images/img.webp 640w, /images/img.webp 253w" />

请注意,我们必须在此处使用 labeljump-to 功能,因为我们必须确保匹配和替换 **within srcsetsrc ** 属性,但并非无处不在。

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 2014-07-26
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2016-09-14
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多