【问题标题】:sed not performing expected substitutionsed 没有执行预期的替换
【发布时间】:2018-04-09 05:02:58
【问题描述】:

我有一个 bash 变量、一些文件路径(带空格)和文件名,例如:

$ echo $tmp
/home/xyz/some/path/with spaces/AlbumArt_{random-number-sequence}_Large.jpg

当我尝试用 grep 识别文件名部分时,例如:

$ echo "$tmp" | egrep  'AlbumArt.*Large.jpe?g$'
/home/xyz/some/path/with spaces/**AlbumArt_{random-number-sequence}_Large.jpg**

文件名部分似乎被正确识别,但是当我尝试将其转换为 sed 替换表达式时,例如:

$ echo "$tmp" | sed 's@AlbumArt.*Large.jpe?g$@NewString@'
/home/xyz/some/path/with spaces/AlbumArt_{random-number-sequence}_Large.jpg

没有发生预期的替换。提前感谢您的帮助。

【问题讨论】:

  • 在 sed 表达式中尝试使用 \? 而不是 ?
  • 使用 egrep ? 可以工作,使用 sed,您需要添加 -E 命令行选项以启用 ERE ...另请参阅 unix.stackexchange.com/questions/119905/…
  • 另外,你应该在.jpe前面转义.
  • -E 命令行选项解决了这个问题,谢谢。

标签: regex bash sed


【解决方案1】:

实际上 egrepgrep -E 的变体,允许“激活”扩展正则表达式(您可以看到:https://en.wikipedia.org/wiki/Regular_expression#Standards)。

因此,您只需使用与 sed 相同的选项:

echo "$tmp" | sed -E 's@AlbumArt.*Large.jpe?g$@NewString@'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-15
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2014-09-22
    • 1970-01-01
    • 2019-11-06
    相关资源
    最近更新 更多