С помощью sed
вы можете запоминать совпадения и восстанавливать их.
Если вы хотите заменить только последнюю последнюю запятую, вы можете использовать
sed -r 's/(=.*),(.*,.*=)/\1?\2/' inputfile
Подстановочный знак является жадным, если у вас есть8 запятых между знаками равенства, седьмое будет заменено.
Вы можете сказать sed
повторять его инструкцию, пока он не найдет совпадение с меткой.Ярлык: a вставляется перед заменой, и для «возврата» указывается ta
.Команда становится
sed -r ':a;s/(=.*),(.*,.*=)/\1?\2/;ta' inputfile
Если у вас более двух знаков равенства, вы должны знать, где искать.Эта команда заменит первый муравей последним знаком равенства:
echo '1,a=2,b,b,b,=3,c=Only, this part, should have, the commas, except this one, replaced=5,e,e'|
sed -r ':a;s/(=.*),(.*,.*=)/\1?\2/;ta'
1,a=2?b?b?b?=3?c=Only? this part? should have? the commas? except this one, replaced=5,e,e
Если вы хотите, чтобы замены выполнялись только между двумя последними знаками равенства, вам необходимо заменить подстановочный знак .
на все, кроме знака равенства[^=]
, что еще сложнее будет прочитать команду
echo '1,a=2,b,b,b,=3,c=Only, this part, should have, the commas, except this one, replaced=5,e,e'|
sed -r ':a;s/(=[^=]*),([^=]*,[^=]*=)([^=]*)$/\1?\2\3/;ta'
1,a=2,b,b,b,=3,c=Only? this part? should have? the commas? except this one, replaced=5,e,e