Вот рабочая версия вашего кода:
a='something Bitcoin something againe $jjjkjk\n againe something'
r=".*Bitcoin.*[\$]([^\n]*).*"
if [[ $a =~ $r ]]; then
echo "${BASH_REMATCH[1]}"
else
echo "no"
fi
Вам нужно найти 'Bitcoin', а затем найти '$' после него, независимо от того, что между ними, поэтому вы должны использовать оператор .*
, также когда вы хотите захватить некоторый текст до определенного символа, лучший способ использует [^]
(не) оператор, в вашем случае: [^\n]
это означает захватывать все до \n
.
Также у вас возникла проблема с объявлением переменной. a = "..."
недопустимо, пробелы пусты. так что правильным является 'a = ".." `.
Использование двойных кавычек также неправильно, это заменит знак доллара пустой переменной ( оценка )