Если элементы вывода, о которых вы упомянули, являются статическими (, если вы уверены, что они не изменятся )означает. Вы можете напрямую использовать команду ниже
Здесь file.txt является доступным выводом
egrep -o "test1|oracle|cuser|dogfish" file.txt | sort | uniq | tac | tr "\n" " " | awk '{$5=$3;$3=$4;$4="";print $0}'| sed -r "s/\s+/ /g"
выход
test1 oracle cuser dogfish
Предположим, что опубликованный вами образец ввода/вывода охватывает все ваши возможные варианты использования, тогда...
С любым sed:
$ var=$(sed -n 's/.*CD: \([^ ]*\).*/\1/p' file)
$ echo "$var"
Testing
С любым awk:
$ var=$(awk 'sub(/.*CD: /,""){sub(/.*/,""); print}' file)
$ echo "$var"
Testing
Используя grep
и регулярное выражение в стиле perl, вы можете использовать положительный просмотр назад:
variable_a=`grep -Po '(?<=CD: )[^ ]+' file.txt`
В bash это говорит:
variable_a
и присвойте ей значение того, что получается из команды в обратных апострофах grep
следует использовать регулярное выражение perl(-P
)и возвращать только совпадающую часть строки(-o
)[^ ]
)