#string #bash #shell #character
#строка #bash #оболочка #символ
Вопрос:
В первой строке я указываю значение 64 и F2DD65
Я хочу перехватить первую переменную, прочитав данные из строки в переменной, сначала с начала строки до :
символа, и прочитать другую переменную после #
символа и на 6 символов вперед. Возможно ли это?
Это строка:
var="64: (242,221,101) #F2DD65 srgb(242,221,101)"
мой конечный результат будет сохранен в переменных:
var1="64"
var2="F2DD65"
Ответ №1:
var1=${var%%:*}
var2=${var##*#}
var2=${var2%% *}
Ссылка: расширение параметра оболочки.
Ответ №2:
sed -rn 's/(^.*)(:.*#)(.*)([[:space:]].*$)/1 - 3/p' <<< "64: (242,221,101) #F2DD65 srgb(242,221,101)"
С помощью sed разделите строку на разделы, используя регулярные выражения (-r). Подставьте строку для соответствующего раздела (первый, а затем третий разделены символом -.
awk -F [:# ] '{ print $1" - "$5 }' <<< "64: (242,221,101) #F2DD65 srgb(242,221,101)"
С помощью awk разделите строку на основе :, # и пробела в качестве разделителей. Выведите 1-е и 5-е поля с разделителями и символом — между ними.
Ответ №3:
С помощью регулярных выражений bash:
var="64: (242,221,101) #F2DD65 srgb(242,221,101)"
re="^([^:] ): .* #([[:xdigit:]] )"
if [[ $var =~ $re ]]; then
var1="${BASH_REMATCH[1]}"
var2="${BASH_REMATCH[2]}"
else
# String isn't the right format
echo Fail
fi