Это может работать для вас (GNU sed):
sed -E ':a;s/[^[:alnum:]|]([[:alnum:]]*)$/\1/;ta' file
Это работает в обратном направлении через каждую строку, удаляя любой символ, кроме a-z
, A-Z
, 0-9
или _
до достижения разделитель полей |
, т.е. работает только с последним полем каждой строки.
Если последнее поле может содержать только буквенные символы верхнего регистра, используйте:
sed -E ':a;/s/[^A-Z|]([A-Z]*)$/\1/;ta' file