2015-09-05 3 views
3

У меня есть sql-файл, который я хочу обновить с помощью скрипта ssh. Я пытаюсь заменить какой-то текст там, используя sed. Я не получаю ошибок, но текст не заменяет. Вот код, который я использую.замена текста в файле sql с использованием переменных

#!/bin/sh 

echo -n "enter theme: " 
read theme 
echo -n "enter username: " 
read user 
echo -n "enter domain/url: " 
read url 

cd /home/$theme/ 

sed -i 's/\/{$theme}/\/{$user}/g' ./$theme.sql 
sed -i 's/{$theme}.domain.net/{$url}/g' ./$theme.sql 

Итак, я пытаюсь заменить существующий текст ($ переменной темы) с новым переменным $ пользователя и $ URL в файле SQL я ссылаться.

Вот SQL фрагмент того, что он будет просеивать через и обновление:

LOCK TABLES `ivg4_options` WRITE; 
/*!40000 ALTER TABLE `ivg4_options` DISABLE KEYS */; 
INSERT INTO `ivg4_options` VALUES (1,'siteurl','http://megashop.domain.net/','yes'),(2,'blogname','Woo Commerce','yes'),(3,'blogdescription','Just another WooCommerce site','yes'),(37,'home','http://megashop.domain.net','yes'),(38,'category_base','','yes'),(40,'advanced_edit','0','yes'),(41,'comment_max_links','2','yes'),(42,'gmt_offset','0','yes'),(43,'default_email_category','1','yes'),(52,'use_trackback','0','yes'),(53,'default_role','subscriber','yes'),(54,'db_version','33055','yes'),(55,'uploads_use_yearmonth_folders','1','yes'),(56,'upload_path','/home/megashop/public_html/wp-content/uploads','yes') 
+0

Не могли бы вы изменить свой вопрос, чтобы включить содержимое этого сценария SQL? Было бы полезно посмотреть, на какой текст должны действовать эти линии sed. – Kenster

+0

Я просто сделал. Это верно? – sven30

+0

Да, это лучше. Итак, «мегашоп» - это пример темы? – Kenster

ответ

0

Во-первых, избавиться от «{» и «}». Вы им не нужны.

Вторая проблема: -i требует аргумента (по крайней мере, некоторые версии ... похоже, здесь), поэтому вы должны указать хотя бы пустую строку '', если хотите ее игнорировать. На странице sed людей:

-i extension 
     Edit files in-place, saving backups with the specified extension. 
     If a zero-length extension is given, no backup will be saved. It 
     is not recommended to give a zero-length extension when in-place 
     editing files, as you risk corruption or partial content in situ- 
     ations where disk space is exhausted, etc. 

Обычно это дает сообщение зашифрованного ошибкя: «СЭД: -i не может быть использован с стандартным вводом». Вы, возможно, пропустили это ...

Это окончательный сценарий:

#!/bin/sh 

echo -n "enter theme: " 
read theme 
echo -n "enter username: " 
read user 
echo -n "enter domain/url: " 
read url 

cd /home/$theme/ 

sed -i '' 's/\/$theme/\/$user/g' ./$theme.sql 
sed -i '' 's/$theme.domain.net/$url/g' ./$theme.sql 
+0

нормально запустили этот сценарий и получил это: корень @ classic30 [~] # /dbtest.sh ввести тему WordPress (терра, megashop: megashop ввести имя пользователя: usertest ввести домен/URL: test.test.net/stage sed: невозможно прочитать s/\/$ theme/\/$ user/g: Нет такого файла или каталога sed: не может прочитать s/$ theme.domain.net/$ url/g: Нет такого файла или каталог – sven30

Смежные вопросы