Como substituir valores em uma string usando sed, mas mantenha a string intacta

1

Como substituir valores em uma string usando sed, mas manter a string intacta?

Por exemplo, echo "01XX1234"

Estou procurando substituir XX por um valor hexadecimal e deixar o 01 e o 1234 intactos. Eu tentei todas as combinações em que consigo pensar, mas sed está tirando o melhor de mim.

Eu posso fazer assim, mas existe uma maneira mais fácil?

echo "01XX1234" | sed -n 's/\(01..1234\)/01AB1234/g'
    
por Cyrus Wolf 03.12.2015 / 09:30

2 respostas

1

sed somente substituirá a substring correspondente de uma string.

$ echo '01XX1234' | sed 's/XX/AF/'
01AF1234

Se você pretende sempre substituir o terceiro e quarto caractere, mas manter o primeiro e o segundo intactos, você pode usar:

$ echo '01XX1234' | sed 's/\(.\{2\}\).\{2\}/AF/'
01AF1234
  • \{2\} significa duas ocorrências do caractere anterior (nesse caso . : qualquer caractere)
  • \(...\) parênteses são usados para criar um grupo correspondente; você pode se referir à subsequência correspondente mais tarde no padrão ou na string de substituição
  • refere-se à primeira substring correspondida (neste caso, ou seja, "01")
por 03.12.2015 / 09:52
2

echo "01XX1234" | sed 's/XX/AB/'

ou echo "01XX1234" | sed 's/\(01\).*\(1234\)/AB/'

    
por 03.12.2015 / 09:38