КомплексAWK
раствор:
awk -F'[()]' '{ sub(/INSERT INTO */,"",$1);
printf "SELECT * FROM %s WHERE ",$1;
len=split($2, f, ","); split($4, v, ",");
for (i=1; i<=len; i++) printf "%s=%s%s", f[i], v[i], (i==len? ";":" AND ");
print ""
}' test_inserts
-F'[()]'
-разделитель сложных полей sub(/INSERT INTO */,"",$1)
-удалить INSERT INTO
фразу из 1-го поля (для извлечения таблицы имя)printf "SELECT * FROM %s WHERE ",$1
-напечатать начало оператора SQL, содержащего имя таблицы split($2, f, ",")
-разделить второе поле с помощью разделителя ,
для получения имен полей(f
становится массивом имен полей)split($4, v, ",")
-разделить 4-е поле разделителем ,
для получения значений поля(v
становится массивом значений полей)Выход:
SELECT * FROM table1 WHERE field1='values1' AND field2='value2' AND field3='value3';
SELECT * FROM table1 WHERE field1='other_values1' AND field2='other_value2' AND field3='other_value3';
SELECT * FROM table1 WHERE field1='another_values1' AND field2='another_value2' AND field3='another_value3';
SELECT * FROM table2 WHERE table2_field1='table2_values1' AND table2_field2='table2_value2' AND table2_field3='table2_value3' AND field4=;
SELECT * FROM table2 WHERE table2_field1='other_table2_values1' AND table2_field2='other_table2_value2' AND table2_field3='other_table2_value3' AND table2_field4=;
SELECT * FROM table2 WHERE table2_field1='another_table2_values1' AND table2_field2='another_table2_value2' AND table2_field3='another_table2_value3' AND table2_field4='another_table2_value4';
Самое простое решение — запустить какой-нибудь TCP-прокси. Вы можете использовать socat
, например:
socat tcp-listen:5555,bind=127.0.0.1,fork tcp:remotehost.some.where:4444
Пока это работает, подключения к порту 5555
на вашем локальном хосте будут переадресовываться на порт 4444
на remotehost.some.where
.
Используемая здесь команда прослушивает только 127.0.0.1
. Если вы действительно хотите принимать подключения от других хостов через порт 5555
, вы можете отказаться от опции bind=127.0.0.1
.
Есть несколько способов сделать это.
1 )Если у вас GNU/Linux, просто используйте для этого iptables
;
2 )Если вы действительно, действительно, ДЕЙСТВИТЕЛЬНО хотите использовать SSH, создайте пару ключей RSA, скопируйте ее в свой файл ключей ~./ssh/authorized _и повторите свою команду, добавив -N
вариант.
3 )Если вы используете дистрибутив на основе Debian или -, вы можете использовать redir
.
4 )Вы также можете выполнить это, используя socat
, вот так:
socat TCP4-LISTEN:80,fork TCP4:www.yourdomain.org:8080
Надеюсь, это поможет.