O que há de errado com a nova linha de escape neste comando sed?

1

Estou tentando adicionar a linha text += num.toString(16); após cada linha, usando sed.

Minha abordagem é: Replace every new line with a new line, plus text += num.toString(16); . Isso é:

sed 's/\
/\
text \+= num\.toString\(16\);/g'

Mas eu não consegui fazer isso funcionar. Estou recebendo unterminated substitute pattern do sed.

O que está errado aqui?

Estou usando o BSD sed.

    
por Utku 18.01.2017 / 15:11

2 respostas

5

Você não pode usar:

s/\
/

para corresponder a nova linha no espaço padrão em s/pattern/replacement/ form. Depende de implementações para interpretar esse padrão. Tanto o GNU sed quanto o BSD sed o tratam como uma nova linha, mas o BSD sed doesn aceite e eleve o erro .

Geralmente, você não pode corresponder a uma nova linha no final da linha de entrada, mas você pode usar \n para corresponder a nova linha que aparece no espaço padrão como resultado do comando N .

O caminho certo, POSIXLY:

sed 'a\
text += num.toString(16);
'

ou:

sed 's/$/\
text += num.toString(16);/'
    
por 18.01.2017 / 15:46
0

O mesmo aplicável a awk da seguinte forma:

awk '{print $0"\ntext += num.toString(16);"}' file

Nesse caso, awk imprimirá cada linha como está e, em seguida, imprimirá text += num.toString(16); em uma nova linha.

    
por 18.01.2017 / 16:06

Tags