Сценарий оболочки: отправлять вывод sed в mysql? - PullRequest
4 голосов
/ 27 января 2010

Попытка передать вывод замены sed текстового файла в MySQL следующим образом:

mysql -D WAR | sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql

Это не работает. Также нет:

mysql -D WAR < sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql

Какое здесь правильное решение?

Ответы [ 4 ]

7 голосов
/ 27 января 2010
sed "s/2000/$START/g;s/2009/$END/g" WAR.sql | mysql -D WAR
5 голосов
/ 27 января 2010
sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql | mysql -D WAR
1 голос
/ 27 января 2010

Просто, чтобы объяснить немного больше, командная строка запускается слева направо, за исключением случая перенаправления ввода. Итак, причина, по которой ваш первый не сработал, в том, что он брал OUTPUT из mysql и отправлял его в sed, а также пытался перенаправить ввод в sed из файла 'WAR.sql'.

Во втором случае вы используете перенаправление файлов на mysql, за исключением того, что вы даете ему команду (в данном случае sed), что означает, что оболочка, вероятно, пыталась открыть [несуществующий] файл с именем 'sed' в текущем каталоге. Следующее перенаправление ввода, вероятно, просто смутило его, если оболочка даже зашла так далеко при разборе.

Я верю (и голосовал за) ответ gbacon как простейшего решения для достижения того, что, я думаю, вы хотите.

0 голосов
/ 27 января 2010
mysql -D WAR < <(sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...