Qual é a maneira correta de inserir \ u usando sed?

1

Estou tentando encontrar uma string que contenha \u e adicione algo a ela.

Por exemplo,

$ echo \user | sed 's/\us/\usX/' -

produz corretamente

\usXer

No entanto, se eu tiver o conteúdo em um arquivo e inseri-lo no seguinte código

$ sed -i 's/\us/\usX/' test

Eu obtenho

\usXer

Então, alguém pode pensar que o problema é a barra invertida de escape, e isso não é necessário. Mas se removê-lo, isso apenas acionará a substituição \u (maiúscula) do comando s de sed .

Assim, qual é a maneira correta de inserir uma seqüência \u usando sed ?

    
por adn 11.08.2015 / 20:23

1 resposta

1

Primeiro, sed 's/\us/…/' não pesquisa por \us ; ele procura por us . Para procurar \us , você precisa usar sed 's/\us/…/' .

Se você estiver procurando por uma string com caracteres especiais, e então adicionando algo a ele, uma técnica útil é usar o caractere & para se referir à string que você pesquisou. Então, por exemplo,

$ sed -i 's/\us/&X/' test

Em geral, & (às vezes chamado de "Localizar o que") representa a parte do espaço de padrão que correspondeu à sua string de pesquisa. Isso é mais útil quando a string de pesquisa é uma expressão regular não simples; por exemplo,

$ echo You say goodbye and I say hello. | sed 's/[gh][a-z]*[eo]/"&"/g'
You say "goodbye" and I say "hello".

Assim como 's/\usmthing/…/' é a maneira de pesquisar por \usmthing , você precisa usar 's/…/\usmthing/' para inserir \usmthing . Por exemplo,

$ echo Boo | sed 's/oo/\ulish/'
BLish                  ← Note that \ul was interpreted to mean "put ‘l’ into upper case".

$ echo Boo | sed 's/oo/\ulish/'
B\ulish
    
por 11.08.2015 / 20:30