Substituição do padrão apenas quando corresponder a uma palavra inteira [duplicada]

7

Digamos que eu tente substituir em um como este

asdasdasdHit Hitasdasd Hit Hit
Hitasda Hit Hit asdaHit Hit Hit
Hit Hitasda Hit
...
...

Existe uma maneira de obter todos os hits "limpos" substituídos por OK? Eu tentei / g mas depois tudo fica bem Com s/\ Hit\ /OK/g o hit na nova linha é perdido.

    
por JDizzle 05.04.2017 / 20:19

1 resposta

12

Sim.

$ sed 's/\<Hit\>/OK/g' file
asdasdasdHit Hitasdasd OK OK
Hitasda OK OK asdaHit OK OK
OK Hitasda OK
...
...

O \< corresponderá a um limite de palavra de comprimento zero no início de uma palavra e \> fará o mesmo no final de uma palavra.

O zero-comprimento-ness de \< e \> significa que eles não corresponderão a nenhum caractere em si, mas forçam o padrão adjacente a corresponder em um limite de palavra.

Um limite de palavras é um ponto em uma string onde um caractere alfanumérico é adjacente a um caractere não alfanumérico, como o ponto entre (um espaço) e H e o ponto entre t e (outro espaço) na string ␣Hit␣ , ou o ponto entre o t e a nova linha imediatamente seguinte em todos os três linhas nos dados do exemplo.

Com o% GNUsed, você pode usar \b no lugar de \< e \> (embora também entenda \< e \> ):

$ sed 's/\bHit\b/OK/g' file

... mas o BSD sed não entende \b .

    
por 05.04.2017 / 20:22

Tags