带反向引用的 sed 正则表达式替换为什么不起作用?

sed regex substitution with backreference why not working?

我正在尝试使用 sed 获取带有扩展名 (abc.jpg) 的完整文件名。

input.txt:

sfdb/asdjfj/abc.jpg
asdfj/asdfj/abd.gif
sfdb/asdjfj/abc.jpg
sfdb/asdjfj/abc-2.jpg
asdfjk/asdjf/asdf_?/sfdb/asdjfj/abc_12.jpg
asdfj/asdfj/abdasdfj

当前命令:

grep ".jpg" input.txt|sed 's:/\([^/]+\.jpg\)::gi'

grep 只是一个获取指定行的例子(虽然这里没有必要)。我已经测试了我的正则表达式只得到 last '/' + 文件名 + .jpg: https://www.regex101.com/r/5GTgak/2

预期输出

abc.jpg
abc.jpg
abc-2.jpg
abc_12.jpg

但我仍然得到相同的输入文件。我做错了什么?

使用以下命令:

sed -rn 's/^.*\/([^/]+\.jpg)$//gp' input.txt 

-r 选项允许扩展正则表达式

/g - 将替换应用于正则表达式的所有匹配项,而不仅仅是第一个。

/p - 如果进行了替换,则打印新模式 space.