У меня есть SQL файл дампа. Существует много таблиц, одна из которых содержит столбец, который я хотел бы установить в null перед окончательным архивированием.
Файл дампа имеет следующую структуру:
COPY public.my_target_table (id, name, content_type_id, codename) FROM stdin;
1 Can add association 1 add_association
2 Can change association 1 change_association
<..................>
COPY public.table_2 (id, name, content_type_id, codename) FROM stdin;
1 Can add association 1 add_association
2 Can change association 1 change_association
Значения табуляции разделены. Моя первоначальная идея состояла в том, чтобы sed
найти / заменить между соответствующими индексами, но я понял, что мне нужно будет сделать это только для одной конкретной таблицы c (в противном случае я стираю данные из всех таблиц по этому индексу).
Есть ли способ указать sed
действовать только после того, как он прошел строку my_target_table
, и отключить, когда достигнет следующей пустой строки?
изменить для ясности
Используя приведенный выше пример, мы хотим вывести:
COPY public.my_target_table (id, name, content_type_id, codename) FROM stdin;
1 \N 1 add_association
2 \N 1 change_association
<..................>
COPY public.table_2 (id, name, content_type_id, codename) FROM stdin;
1 Can add association 1 add_association
2 Can change association 1 change_association
... при условии, что память у меня правильная, а \N
означает ноль. В идеале ответ может быть расширен до любой целевой таблицы и индекса столбца (или даже лучше, целевой таблицы и имени столбца :)). Кроме того, я не ограничен sed
- я слышал, awk
может быть полезным инструментом здесь?