unix - Why wont the plus work properly with this sed command? -
i can't ([^/]+) sed regex work properly.
instead of returning non-forward slash characters, returns one.
command:
echo '/test/path/file.log' | sed -r 's|^.*([^/]+)/(.*)$|\1.\2|g' expected:
path.file.log result:
h.file.log also tried got same result:
echo '/test/path/file.log' | sed -r 's|^.*([^/]{1,})/(.*)$|\1.\2|g'
the problem not [^/]+, preceding .*. .* greedy, , consume maximal amount of input. usual suggestion use .*? make non-greedy, posix regexes don't support syntax.
if there slash, add 1 regex stop consuming much.
$ echo '/test/path/file.log' | sed -r 's|^.*/([^/]+)/(.*)$|\1.\2|g' path.file.log
Comments
Post a Comment