sed正则表达式替换后退为什么不工作?

时间:2017-02-16 14:15:42

标签: regex sed substitution

我正在尝试使用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\):\1:gi'

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

预期输出

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

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

1 个答案:

答案 0 :(得分:2)

使用以下命令:

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

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

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

/p - 如果进行了替换,则打印新的模式空间。