Você está muito perto. Você precisa usar parênteses de captura:
sed -E -i 's/ahmed(.)mohamed/mohamedahmed/g'
O é substituído pelo texto do primeiro conjunto de parênteses.
Como usar o regex do sed para substituir as palavras relacionadas entre si e um caractere entre eles sem alterar o caractere e as duas palavras como grupo assim
ahmed#mohamed
ahmed$mohamed
ahmed7mohamed
Eu não queria substituir ahmed
apenas e substituir mohamed
eu usei
sed -i 's/ahmed.mohamed/mohamed.ahmed/g'
mas faça tudo assim, quero manter o personagem entre eles.
mohamed.ahmed
mohamed.ahmed
mohamed.ahmed
Você deseja trocar as duas strings ahmed
e mohamed
separadas por algum caractere.
O problema na sua expressão,
s/ahmed.mohamed/mohamed.ahmed/
é que o caractere entre as palavras é sempre substituído por um ponto. A solução é capturar o personagem e substituí-lo por si mesmo.
Esta é uma maneira de fazer isso com sed
, que também usa o mesmo mecanismo de captura para evitar a digitação nas duas strings novamente para a substituição:
sed 's/\(ahmed\)\(.\)\(mohamed\)//'
ou
sed -E 's/(ahmed)(.)(mohamed)//'
Teste nos dados fornecidos:
$ sed -E 's/(ahmed)(.)(mohamed)//' <file
mohamed#ahmed
mohamed$ahmed
mohamed7ahmed
Tags sed regular-expression