2009-04-21 4 views
3

Я пишу скрипт оболочки для редактирования Атрибуты для изменения атрибута. команды я использую:Использование переменной с sed в Shell Script

aegis -Change_Attributes -Edit 

, который открывает редактор VI для выполнения из изменений. Я хочу, чтобы сделать поиск и заменить:

s/brief_description \= \"none\"\;/brief_description \= 

\ «тест \»/г

Могу ли я передать их непосредственно к открытому VI например, через скрипт без ввода в любой из них? Я хочу сохранить документ (: wq) после его редактирования.

P.S. Файл представляет собой временный файл создается при выполнении команды так я не знаю, оригинальный путь

Edit: я мог бы использовал СЭД в этом случае:

sed -e 's/brief_description\ \=\ \"none\"\;/brief_description\ \=\ 

\ "тест \ "\/г»

раствор (безвкусный хак ??) будет быть "кошка" на выходе из эгидой (SetEnv VISU AL кошка), изменить поток из пут вышеуказанной командой и сохранить его на временный файл, а также использование:

aegis -change_attributes -file <temp file> 

EDIT2: Я почти получил его на работу. Но есть проблема с тем, как я использую sed

У меня есть следующие строки в моем сценарии:

sed -i 's/brief_description\ \=\ \"none\"\;/brief_description\ \=\ \"${DESC}\"\;/g' temp_next.txt 

Но переменные $ DESC не оценивает его стоимость и вне положенном даются как:

brief_description = "$ {DESC}";

Как передать DESC в sed, чтобы он оценил его фактическое значение?

EDIT3:

Использование

sed -i 's%brief_description\ \=\ \"none\"\;%brief_description\ \=\ \"'"$DESC"'\"\;%g' temp_next.txt 

работал. Я заменяю нормальный разделитель (/) на% и помещаю переменную окружения в двойные кавычки.

ответ

5

Вам не нужно знать путь - приложение aegis предоставит его. Вам нужно изменить переменную окружения, которая указывает, что редактор aegis использует, чтобы указать на скрипт, и в этом скрипте используйте редактор потока sed для выполнения ваших изменений.

Редактировать: Что касается проблемы расширения имен переменных, измените набор одинарных кавычек, охватывающих все выражение замещения sed, на двойные кавычки. Переменная замещения отключается одинарными кавычками.

+0

Если я использую кошку и изменять выходные с СЕПГ, будут изменения получить сохранялось в файл? – Gayan

+0

Нет, вам нужно перенаправить вывод sed где-нибудь, в этом случае во временный файл. Затем, когда редактирование сделано, удалите оригинал и переименуйте временный. – 2009-04-21 11:03:21

+0

Если вы используете GNU sed, вы можете использовать флаг -i для редактирования файла. – skoob

0

Я не думаю, что ваниль vi сделает это, хотя vim может это сделать под контролем пользовательского .vimrc. Лучшим способом было бы сделать изменения с помощью sed, а затем открыть vi в результате.

2

Если вы передадите нужную команду через опцию -c, то vi выполнит команду сразу после запуска сеанса редактирования, например.

vi -c 's/brief_description \= \"none\"\;/brief_description \= \"test\"/g' my_file 

К сожалению. Я забыл сказать, что команда интерпретируется как команда «ex», т. Е. В двоеточие, поэтому команда, которую вы предоставили, должна работать.

HTH

веселит,

+0

Да. Это то, что я искал. К сожалению, я не открываю сеанс vi, поэтому я не могу передать какие-либо параметры командной строки. прибегают к использованию cat вместо – Gayan

+0

Если вы действительно хотите использовать vi, вы можете это сделать - просто используйте его вместо этого из sed в сценарии, который я предложил. Я думаю, что использование sed лучше, хотя - я не считаю его неэлегантным. – 2009-04-21 11:36:41

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