#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
вывод, если перенаправить его в файл и просмотреть в редакторе?