Сед не работает ожидаемо - PullRequest
0 голосов
/ 17 марта 2010

Я сделал этот bash однострочным, который я использую для перечисления экземпляров Weblogic, работающих вместе с их полным путем. Это хорошо работает, когда я запускаю его из оболочки.

/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort

Я пытался включить это в сценарий ожидания

send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort ; echo ; echo\r"

но я получил эту ошибку sed: -e выражение # 1, символ 13: неизвестная опция `s '

Пожалуйста, помогите

Ответы [ 5 ]

2 голосов
/ 17 марта 2010

Возможно символ \ в

sed 's/security\///'

требуется дополнительный выход в ожидаемом контексте, например

send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\\///' | sort ; echo ; echo\r"
1 голос
/ 08 апреля 2010

Используйте оператор Tcl {} вместо двойных кавычек вокруг строки, которую вы хотите отправить. Синтаксис {} в Tcl эквивалентен одинарной кавычке в bash, что означает «буквальная строка, не интерпретируйте ее содержимое».

Внутри {} поместите именно то, что вы хотите, чтобы Tcl / Expect отправлял подпроцессу, символ за символом, никаких дополнительных кавычек не требуется.

1 голос
/ 17 марта 2010

Без тщательного подсчета или тестирования, я бы попытался добавить еще один \ после «безопасности» или, возможно, удалить существующий.

Также вы можете объединить два седа в один: sed -e 's/weblogic.policy//' -e 's/security\///'

0 голосов
/ 17 марта 2010

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

Более того, вы должны использовать ssh вместо expect для запуска скриптов. expect предназначен для запуска интерактивных команд, таких как ftp, которые не имеют подходящих возможностей сценариев.

0 голосов
/ 17 марта 2010

Вы можете попробовать удалить одинарные кавычки и снова запустить команду.

send "....... sed s/weblogic.policy// | sed s/security\/// ..."

Скорее всего, это проблемы с цитированием. Если это не хорошо, попробуйте предложение по hlovdal

между тем, некоторые из ваших длинных команд могут быть объединены

/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort 
...