【发布时间】:2022-01-07 02:46:40
【问题描述】:
我正在尝试用图像bar 替换除 URL 之外的所有 URL 的图像标记。但是,它说正则表达式无效。
只检查 regex101.com 上的正则表达式 (image:(?!.*bar).*:).* 看起来不错。将 sed 表达式的第二部分替换为组 (image:(?!.*bar).*:) 时出现错误。
$ echo '
image: mydomain/subdomain/foo:old_tag
image: mydomain/subdomain/bar:dont_update_me_tag
image: mydomain/subdomain/baz:old_tag
' | sed --regexp-extended "s|(image:(?!.*bar).*:).*|\1new_tag|g"
sed: -e expression #1, char 36: Invalid preceding regular expression
预期的最终结果是:
image: mydomain/subdomain/foo:new_tag
image: mydomain/subdomain/bar:dont_update_me_tag
image: mydomain/subdomain/baz:new_tag
正则表达式(image:(?!.*bar).*:).*的解释
搜索所有包含image:.*:.* 的行,但包含image:.*bar 的行除外
【问题讨论】:
-
(?!...)是 Perl 扩展,--regexp-extended不会将sed转换成 Perl。