Comportamento POSIX das âncoras de sed e ^ regex com espaços de padrão de múltiplas linhas

4

Qual é o comportamento POSIX das âncoras sed ^ e $ quando usadas no início e no final de uma expressão regular se o espaço padrão contiver novas linhas incorporadas, como depois de usar o N comando?

Eles ainda devem coincidir com o começo e o fim do espaço padrão ou devem combinar o início e o fim de qualquer linha agora que contém várias linhas?

O sed e ^ do% GNU $ ainda correspondem apenas ao início e ao final de todo o espaço do padrão.

    
por user129102 18.08.2015 / 11:32

1 resposta

2

^ e $ em BRE sempre correspondem no início e fim de linha , conforme descrito aqui .

Qualquer sed que use BRE fará o mesmo. No caso de usar o comando N , sed viu várias linhas como uma linha longa no espaço padrão, com cada linha real separada por nova linha incorporada \n (literal \ e n ).

Para confirmação:

printf '1\n2\n' | sed '1N;/2$/d'

não produz nada. E:

printf '1\n2\n' | sed '1N;/1$/d'

deu a você:

1
2

Ou usando o comando l ook para mais detalhes:

$ printf '1\n2\n' | sed 1N\;l
1\n2$
1
2

$ printf '1\n2\n' | sed 1N\;l | od -t a
0000000   1   \   n   2   $  nl   1  nl   2  nl
0000012
    
por 18.08.2015 / 11:46