corresponde a espaço ou nova linha no sed

5

Eu li e pesquisei, mas não entendi o que há de errado com isso, quero corresponder: um espaço, a string 00011 e um espaço ou uma nova linha.

sed 's:\(\s\)\(00011\)\([\s\n]\):$03:g'

EDIT: os dados são assim:

ADD    00000 00001 00011
LSH    00011 00100 01111
ADD    00011 10100 00010
JSR    00011101000111010101100010

e $03 são apenas uma string para substituir o 00011

Eu quero acabar com algo assim:

ADD    00000 00001 $03
LSH    $03 00100 01111
ADD    $03 10100 00010
JSR    00011101000111010101100010

Obrigado

    
por onlycparra 26.09.2018 / 10:42

2 respostas

3

sed funciona em uma linha por vez e tira as novas linhas ao processar cada linha.

Assim, para fazer o que você quer, você deve combinar a âncora de fim de linha ( $ ) em vez de um caractere de nova linha literal.

Isso deve funcionar:

sed 's:\(\s\)\(00011\)\(\s\|$\):$03:g'
    
por 26.09.2018 / 11:22
4
$ sed 's/\<00011\>/$03/g' file
ADD    00000 00001 $03
LSH    $03 00100 01111
ADD    $03 10100 00010
JSR    00011101000111010101100010

O \< e \> correspondem aos limites da palavra com largura zero no início e no final de uma palavra, respectivamente. O BSD sed também reconheceria [[:<:]] e [[:>:]] e o GNU sed também entenderia \b como limite de palavras.

sed nunca verá as novas linhas nos dados de entrada. Além disso, \s é específico para o GNU sed . Para corresponder a um caractere de espaço no padrão sed , use apenas um espaço literal (para corresponder a um espaço ou tabulação, use [[:blank:]] ).

    
por 26.09.2018 / 11:30