Выполнение команды через «grep» прерывает вывод (удаляет новые строки)

#shell #grep

Вопрос:

У меня есть команда, которая выводит список инструкций SQL для запуска в базе данных:

 ./console doctrine:schema:update --dump-sql --complete

 The following SQL statements will be executed:

     DROP SEQUENCE example_1 CASCADE;
     DROP SEQUENCE example_2 CASCADE;
     CREATE TABLE something_else (id INT NOT NULL, some_id VARCHAR(26) NOT NULL, product_id VARCHAR(12) NOT NULL, cause TEXT NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id));
 [...] many more lines
     ALTER TABLE invoice_lines ALTER net_amount DROP DEFAULT;
     ALTER TABLE example_users ALTER something_enabled DROP DEFAULT;
     ALTER TABLE leads ADD validation_guide_id INT DEFAULT NULL;
     ALTER TABLE leads DROP structured_data;
 

Я показал только несколько строк, но фактический вывод-это еще много, много строк. И большинство из них мне безразличны, так как они есть DROP DEFAULT , которые по определенным причинам мне не нужны.

Итак, я запускаю вывод grep с помощью v опции:

 ./console doctrine:schema:update --dump-sql --complete | grep -v 'DROP DEFAULT'
 

Это работает, как и в строках, которые включают DROP DEFAULT , исключены, но вывод нарушен, так как кажется, что новые строки удалены, и все это выглядит просто ужасно.

вывод команды (извините, похоже, я еще не могу встроить изображение)

 ❯ ./console doctrine:schema:update --dump-sql --complete | grep -v 'DROP DEFAULT' 

 The following SQL statements will be executed:

                                                    DROP SEQUENCE home_page_leads_id_seq CASCADE;
                                                                                                      DROP SEQUENCE lead_action_types_id_seq CASCADE;
                                                                                                                                                          CREATE TABLE partner_cancellations (id INT NOT NULL, partner_user_id VARCHAR(26) NOT NULL, product_id VARCHAR(12) NOT NULL, cause TEXT NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id));
           CREATE INDEX IDX_5EBB703C6084B088 ON partner_cancellations (partner_user_id);
                                                                                             CREATE INDEX IDX_5EBB703C4584665A ON partner_cancellations (product_id);
                                                                                                                                                                          COMMENT ON COLUMN partner_cancellations.created_at IS '(DC2Type:datetime_immutable)';
                                                                               ALTER TABLE partner_cancellations ADD CONSTRAINT FK_5EBB703C6084B088 FOREIGN KEY (partner_user_id) REFERENCES partner_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
 

Что я могу сделать , чтобы вывод моей команды не искажался при выполнении grep , а новые строки сохранялись?

На случай, если это важно, я запускаю это в macOS, используя Zsh.

Комментарии:

1. Какой macOS …? Похоже, терминал неправильно обрабатывает LF. Что там stty написано? Как выглядит grep вывод, если перенаправить его в файл и просмотреть в редакторе?