Como usar o regex do sed para substituir palavras relacionadas entre si e um caractere entre elas

1

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
    
por Medo Gamal 26.11.2018 / 04:20

2 respostas

1

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.

    
por 26.11.2018 / 04:35
1

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
    
por 26.11.2018 / 09:05