pt sed remove nova linha no EOF

1

Eu tentei usar sed para substituir um SELECT por BELECT em um arquivo:

sed 's/SELECT/BELECT/g' add_pixel.sql | diff - add_pixel.sql

Me dá:

22c22
<   BELECT MAX(ID) INTO max_id FROM pixels;
---
>   SELECT MAX(ID) INTO max_id FROM pixels;
36c36
<       '(BELECT id FROM pixels WHERE pixel_id=''', new_pixel_id,
---
>       '(SELECT id FROM pixels WHERE pixel_id=''', new_pixel_id,
47c47
< DELIMITER ;
---
> DELIMITER ;
\ No newline at end of file

Isso foi confirmado por wc - o campo depois que sed é uma linha menor que o original.

Por que o sed 's/SELECT/BELECT/g' do sed removeu a nova linha da última linha do arquivo?

    
por Adam Matan 08.08.2012 / 09:43

1 resposta

3

É o seu arquivo sql que está faltando a nova linha. sed era "legal" e garantiu que sua saída tivesse uma nova linha.

$ diff <(printf 'x') <(printf 'x\n')
1c1
< x
\ No newline at end of file
---
> x

$ diff <(printf 'x\n') <(printf 'x')
1c1
< x
---
> x
\ No newline at end of file

Observe como a linha "\ No newline ..." está posicionada de acordo com o arquivo que estava faltando.

    
por geirha 08.08.2012 / 12:51