Как удалить сначала X строк из файла до первого вхождения конкретной строки?

У меня есть много дампов PostgreSQL, регистрирует такой это и потому что я импортирую эти файлы автоматически в другой сервер базы данных (H2) и SET команда не совместима с этой базой данных, я должен удалить все строки до самого первого INSERT команда.

Как я могу сделать это в сценарии оболочки?

--
-- PostgreSQL database dump
--

-- Dumped from database version 9.6.8
-- Dumped by pg_dump version 9.6.8

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;

--
-- Data for Name: workgroups; Type: TABLE DATA; Schema: public; Owner: postgres
--

INSERT INTO public.workgroups.....

Спасибо.

0
задан 11 October 2018 в 00:23

2 ответа

Можно сделать это использование sed:

sed -n '/^INSERT/,$p' file.sql
  • Это говорит, печатают данные из строки, которая начинается INSERT ... в конец.
    • От желаемого шаблона: /^INSERT/
    • К ,
    • Конец $
    • Печать p

Изменить файл вместо того, чтобы просмотреть его:

sed -n -i.bk '/^INSERT/,$p' file.sql
  • Это сохранило бы исходные файлы с .bk суффикс.

Выполнять его на всех файлах:

sed -n -i.bk '/^INSERT/,$p' ~/path/to/sql_dir/*.sql

Например:

Foo
Bar
FooBar
INSERT Foo
Fantastic

Стал бы:

INSERT Foo
Fantastic
1
ответ дан 27 October 2019 в 08:27

Можно сделать это использование awk:

awk '/^INSERT/{x=1}x==1' <in >out        # including the INSERT line
awk 'x==1{print}/^INSERT/{x=1}' <in >out # including the INSERT line

Это читает файл in линию за линией и наборы x=1 если начало строки со “ВСТАВКИ” найдено. Если x 1, это печатает в настоящее время обрабатываемую строку – в первом выражении {print} был опущен, поскольку это - действие по умолчанию. Вывод сохраняется в файле out, не учесть >out распечатать к терминалу вместо этого.

Источник: awk: строки печати после соответствия к концу файла

0
ответ дан 27 October 2019 в 08:27

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

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