没有进行预期的替代

时间:2017-10-27 14:37:39

标签: regex bash sed

我有一个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

预期的替代不会发生。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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