gnu sed:
$ sed -r 's/_/-/g;s/(^[^-]+)-/\1_/;s/-([^-]+$)/_\1/' <<<'x_a_b_c_y'
x_a-b-c_y
Идея состоит в том, чтобы заменить все _
на -
, а затем восстановить те, которые вы хотите сохранить.
update
если поля, разделенные _
, содержат -
, мы можем использовать ge
gnu sed:
sed -r 's/(^[^_]+_)(.*)(_[^_]+$)/echo "\1"$(echo "\2"\|sed "s|_|-|g")"\3"/ge'
Например, мы хотим, чтобы ----_f-o-o_b-a-r_----
было ----_f-o-o-b-a-r_----
:
sed -r 's/(^[^_]+_)(.*)(_[^_]+$)/echo "\1"$(echo "\2"\|sed "s|_|-|g")"\3"/ge' <<<'----_f-o-o_b-a-r_----'
----_f-o-o-b-a-r_----