sed удаляет перевод строки в EOF

Я пытался использовать sed для замены SELECT на BELECT в файле:

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

Дает мне:

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

Это было подтверждено wc - поле после sed на одну строку короче оригинала.

Почему sed 's/SELECT/BELECT/g' удалил символ новой строки из последней строки файла?

1
задан 8 August 2012 в 11:43

1 ответ

Это твой файл sql, в котором отсутствует символ новой строки. sed был «хорош» и удостоверился, что его вывод имеет завершающий перевод строки.

$ 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

Обратите внимание, как располагается строка «\ No newline ...» в соответствии с тем, в каком файле ее не было.

0
ответ дан 8 August 2012 в 11:43

Другие вопросы по тегам:

Похожие вопросы: