我正在尝试使用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
但我仍然得到相同的输入文件。我做错了什么?
答案 0 :(得分:2)
使用以下命令:
sed -rn 's/^.*\/([^/]+\.jpg)$/\1/gp' input.txt
-r
选项允许扩展正则表达式
/g
- 将替换应用于正则表达式的所有匹配,而不仅仅是第一次。
/p
- 如果进行了替换,则打印新的模式空间。