带反向引用的 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.
我正在尝试使用 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.