我无法让([^/]+)
sed正则表达式正常工作
它不返回所有非正斜杠字符,而只返回一个。
命令:
echo '/test/path/file.log' | sed -r 's|^.*([^/]+)/(.*)$|\1.\2|g'
预期:
path.file.log
结果:
h.file.log
也尝试了这个但得到了相同的结果:
echo '/test/path/file.log' | sed -r 's|^.*([^/]{1,})/(.*)$|\1.\2|g'
答案 0 :(得分:2)
问题不在于[^/]+
,而在于.*
。 .*
贪婪,并且会消耗最大量的输入。我通常的建议是使用.*?
使其非贪婪,但POSIX正则表达式不支持该语法。
如果总是有斜杠,你可以在正则表达式中添加一个斜杠来阻止它消耗太多。
$ echo '/test/path/file.log' | sed -r 's|^.*/([^/]+)/(.*)$|\1.\2|g'
path.file.log
答案 1 :(得分:0)
操作系统使用不同版本的sed
。默认情况下,某些sed
版本使用基本的regexp语法;如果您需要扩展的正则表达式语法(+
是其中一项功能),那么您需要使用-E
切换选项。