поиск выходной строки и сохранение в переменной - PullRequest
1 голос
/ 02 марта 2012

Как найти слово в выводе скрипта оболочки и сохранить в другой переменной.

Ниже команда отобразит список базовых линий в моем представлении.

cmd :cleartool lsstream -fmt "%[found_bls]NXp\n" -view $VIEW_NAME

Выход:

baseline:MHC_BUILDTREE1.0.1
baseline:JEPG_DUIF_CI
baseline:MOR_BuildTree_BLD_I.0.1

Мне нужно найти строку, содержащую "MOR_BuildTree" и эту строку вывода, которую я должен сохранить в одной переменной, чтобы выполнить остальные команды. Кто-нибудь может дать предложение?

Ответы [ 3 ]

0 голосов
/ 02 марта 2012

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

$ res=`cleartool lsstream -fmt "%[found_bls]CXp" -view $VIEW_NAME | tr -s " " "\\012" | grep $yourBaselineName| sed -e "s/.*://" -e "s/@.*//"`

(установите $yourBaselineName на соответствующее имя, которое вы хотите извлечь)

Основная трудность связана с тем фактом, что lsstream -fmt "%[found_bls]CXp" перечислит все базовые линии фундамента в одной и той же строке вывода (поэтому выходные данные представляют собой только одну строку базовых имен, разделенных запятой). Сначала нужно разбить строку на несколько.
Смотрите " Как разбить одну строку на несколько строк в оболочке bash? ": это часть tr -s " " "\\012" вышеуказанной команды.

Затем вам нужно удалить то, что предшествует, и следовать базовому имени:

 baseline:aBaselineName@/vobs/YourPVob

Часть sed приведенной выше команды может сделать это:

sed -e "s/.*://" -e "s/@.*//"

(два регулярных выражения удаляют все до ':' и после '@')

0 голосов
/ 02 марта 2012

Разве это не простой сценарий оболочки?

variable=$(cmd :cleartool lsstream -fmt "%[found_bls]NXp\n" -view $VIEW_NAME |
           sed -n '/MOR_Buildtree/s/^baseline://p')

Опции -n означают «не печатать по умолчанию». Команда ищет ваше имя, удаляет начальный baseline: и печатает его.

0 голосов
/ 02 марта 2012

Не совсем точно, что вы спрашиваете, но чтобы установить переменную для результата команды, вы можете использовать:

var=`command`

или вы можете направить команду к какому-либо фильтру, чтобы переформатировать ее при необходимости.

command | some_filter | another filter

Вы также можете объединить два:

var=`command | some_filter | another filter`
...