Да, в (укажите регулярное выражение, иначе оно будет интерпретировано как глобус оболочки):
grep -Eq '[0-9]{7}' <<< "1505082"
grep соответствует 7 цифрам. Вы можете увидеть, что сопоставляется, заменив q наo
:
$ grep -Eo '[0-9]{7}' <<< "1505082"; echo "$?"
1505082
0
И да, это тоже будет соответствовать этому:
$ grep -Eq '[0-9]{7}' <<< "150508299999"; echo "$?"
1505082
0
Он убрал все девятки.
Проблема в том, что вы делаете не привязанное соответствие -, и оно будет соответствовать 7-значному(или более)числу.
Вы можете закрепить с помощью:
$ grep -Eq '^[0-9]{7}$' <<< "15050829999"; echo "$?"
1
Чтобы сопоставить 7-значное число в любом месте , за которым или перед которым стоят не -цифры, вам нужен совершенно другой якорь:
$ grep -oP '(?<=^|[^0-9])[0-9]{7}(?=[^0-9]|$)' <<< "1505082"; echo $?
1505082
0
$ grep -oP '(?<=^|[^0-9])[0-9]{7}(?=[^0-9]|$)' <<< "1505082_CSE_322"; echo $?
1505082
0
$ grep -oP '(?<=^|[^0-9])[0-9]{7}(?=[^0-9]|$)' <<< "1505082999_CSE_322"; echo $?
0
Это просмотр вперед, один просмотр -назад:
(?<=^|[^0-9])
Это соответствует либо началу строки (^
), либо цифре, отличной от -. Другой — прогноз:
(?=[^0-9]|$)
, которые соответствуют цифре, отличной от -, или концу строки.
Единственная другая альтернатива более простому Extended
регулярному выражению – извлечь любую серию из7
(или более )цифр, а затем подтвердить, что это ровно 7 цифр:
$ echo "150508299_CSE_322" |
grep -oE '[0-9]{7,}' |
grep -qE '^[0-9]{7}$'; echo "$?"
1
Первое, что нужно сделать, это удалить kali-rolling
из вашего sources.list
, потому что это сломает ваш apt
, а затем запустить:
sudo apt update
Следующий шаг: используйте параметр --force-overwrite
для принудительной установки пакета:
sudo dpkg -i --force-overwrite /var/cache/apt/archives/libgstreamer-plugins-bad1.0-0_1.18.0-2+b1_amd64.deb
, а затем:
sudo apt install -f
sudo apt update
sudo apt upgrade