bash - использование sed для удаления n-го элемента из оператора sql

0

Мне больше не нужен столбец в таблице, и мне нужно изменить скрипт для вставки данных. Например, мне больше не нужен столбец "code". Как удалить третий элемент для каждого значения?

-- Create table variable
CREATE TABLE currency (
  country  VARCHAR(100),
  currency VARCHAR(100),
  code     VARCHAR(100),
  symbol   VARCHAR(100)
);

-- Insert currency records
INSERT INTO currency (country, currency, code, symbol)
VALUES
('Albania', 'Leke', 'ALL', 'Lek'),
('Afghanistan', 'Afghanis', 'AFN', '؋');
  • 1
    Похоже, одноразовый импорт. Вы можете просто оставить его тут же, а затем DROP COLUMN .
Теги:

1 ответ

0
Лучший ответ

Для этого вы можете использовать sed с регулярным выражением. Следующее удалит (на месте) третий столбец из всех строк, начинающихся после строки VALUES:

sed -i "s/\(('[a-zA-Z]\+', '[a-zA-Z]\+',\) '[a-zA-Z]\+',\( '.*').*\)/\1\2/g" input.sql

Вышеупомянутый не удаляет code VARCHAR(100), из инструкции CREATE TABLE или code из строки INSERT INTO. Если вы хотите их удалить, вы можете использовать следующий код:

cat input.sql | sed '/code\s\+VARCHAR/d' | sed 's/\(INSERT INTO .*\)code, \(.*\)/\1\2/' | sed "s/\(('[a-zA-Z]\+', '[a-zA-Z]\+',\) '[a-zA-Z]\+',\( '.*').*\)/\1\2/g"

Это приведет к выводу:

-- Create table variable
CREATE TABLE currency (
  country  VARCHAR(100),
  currency VARCHAR(100),
  symbol   VARCHAR(100)
);

-- Insert currency records
INSERT INTO currency (country, currency, symbol)
VALUES
('Albania', 'Leke', 'Lek'),
('Afghanistan', 'Afghanis', '؋');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню