When using the "y" command, it seems like square bracket balancing is required. Square brackets should instead be treated like any other character in the "y" cmd context, as they are already at the time of doing the actual character replacement:
sh$ echo | sed 'y/[/x/'
sed: 1: "y/[/x/": unbalanced brackets ()
sh$ echo | sed 'y//xy/'
sed: 1: "y//xy/": unbalanced brackets ()
sh$ echo | sed 'y/[a]/xyz/'
sh$ echo '][a' | sed 'y/[a]/xyz/'
(In reply to Quentin L'Hours from comment #0)
Could you please check if the patch from review fixes the issue for you?
(In reply to Yuri Pankov from comment #1)
Yep works perfectly with this patch, thanks!
Created attachment 216441 [details]
patch for exp-run
Asking for exp-run on this change as sed has quite a history of backouts as breaking the ports.
Exp-run looks fine
A commit references this bug:
Date: Sun Jul 26 09:15:05 UTC 2020
New revision: 363543
sed: treat '[' as ordinary character in 'y' command
'y' does not handle bracket expressions, treat '[' as ordinary character
and do not apply bracket expression checks (GNU sed agrees).
Reviewed by: pfg, kevans
Tested by: antoine (exp-run), Quentin L'Hours <firstname.lastname@example.org>
Differential Revision: https://reviews.freebsd.org/D25640