【发布时间】: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 命令行选项解决了这个问题,谢谢。