Как убрать одинарные кавычки вокруг строки в скрипте Bash? - PullRequest
0 голосов
/ 10 октября 2019

У меня написан файл сценария оболочки (.sh), и он сохраняет результат запроса SQL в файл.

Результаты файла SQL необходимо конвертировать в запросы INSERT.

В запросе SQL есть три столбца, и они записаны в файл с помощью следующей команды

mysql -u$db_user -p -h 127.0.0.1 -P 3308 < my_query.sql > my_results_into_file

Теперь я делаю некоторые манипуляции с файлом my_results_into_file

sed -i.bak -e $'s/\t/\x27,\x27/g' my_results_into_file # replace tabs in output with commas, add single quotes around values
sed -i.bak -e '1d' my_results_into_file # remove first line from the file (column names)
sed -i.bak -e $'s/^/INSERT INTO mytable(column1, column2, column3) VALUES(\x27/' my_results_into_file # build inserts
sed -i.bak -e $'s/$/\x27);/' my_results_into_file # build inserts

Приведенный выше сценарий приводит к проблеме, потому что в запросе есть столбец NULLABLE, и он может содержать NULL, что приведет к тому, что значение NULL будет заключено в одинарную кавычку и будет обработано как NULL и является строкой.

Есть ли способ, которым в одном из сценариев я могу избежать размещения одинарных кавычек вокруг NULL ???

1 Ответ

1 голос
/ 10 октября 2019

Поскольку вы запускаете данные с помощью серии команд sed, я думаю, что самым простым решением будет еще одна sed, например:

$ echo "insert into mytable values ('a',123,'NULL');" | sed "s/'NULL'/NULL/g"
insert into mytable values ('a',123,NULL);

Теперь, сделаете ли вы этов качестве другого отдельного вызова sed, например:

$ sed -i.bak -e $"s/'NULL'/NULL/g" my_reulsts_into_file

или преобразовать, скажем, ваш первый sed вызов в вызов с несколькими шаблонами sed, например:

$ sed -i.bak -e $"s/\t/\x27,\x27/g; s/'NULL'/NULL/g" my_results_into_file

... решать вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...