Мне больше не нужен столбец в таблице, и мне нужно изменить скрипт для вставки данных. Например, мне больше не нужен столбец "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', '؋');
Для этого вы можете использовать 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', '؋');
DROP COLUMN
.