Я использую порт Windows sed.exe .

Когда я делаю что-то подобное прямо из командной строки:

sed.exe -i "s/WRITE;/WRITE; TRUNCATE TABLE `Team_matchdayResults`;/g" my_script.sql

все работает безупречно, а текстовые части изменены в файле my_script.sql .

Теперь я хочу сделать то же самое, но из файла .bat . Что я знаю, так это то, что мне нужно избегать двойных кавычек, поэтому я сделал это так.

sed.exe -i ""s/WRITE;/WRITE; TRUNCATE TABLE `Team_matchdayResults`;/g"" my_file.sql

К сожалению, это заканчивается следующей ошибкой

sed.exe: -e expression #1, char 15: unterminated `s' command

Я полагаю, что мне нужно избежать чего-то большего, но я, кажется, понятия не имею, что именно. Я где-то читал это ; должен быть экранирован в пакетном файле, но только в цикле FOR . Однако это не привело меня дальше.

От чего мне еще бежать?

1 ответ1

1

Я скачал GNU Sed для Windows только для того, чтобы проверить это, и обнаружил, что вам не нужно ничего экранировать, чтобы он работал внутри файла .bat . Цитаты " и их содержание интерпретируются правильно.

Содержимое test.txt :

Test0 WRITE;
Test1 WRITE
Test2 WRITE;

содержание test.bat :

sed -i "s/WRITE;/WRITE; TRUNCATE TABLE `Team_matchdayResults`;/g" test.txt

Новое содержимое test.txt после запуска test.bat:

Test0 WRITE; TRUNCATE TABLE `Team_matchdayResults`;
Test1 WRITE
Test2 WRITE; TRUNCATE TABLE `Team_matchdayResults`;

Вы пробовали Cygwin? Это позволяет запускать и создавать сценарии общих команд UNIX в Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .