Если вы используетеbash
(или аналогичную оболочку):
ipnums=( 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 )
select ip in "${ipnums[@]}"; do
case $ip in
"") echo 'Invalid choice' >&2 ;;
*) break
esac
done
printf 'You picked IP %s\n' "$ip"
Это отобразит меню и подсказку, подобные этой:
1) 192.168.1.1
2) 192.168.1.2
3) 192.168.1.3
4) 192.168.1.4
#?
Подсказку можно изменить, установив PS3
на используемую строку подсказки.
Цикл select
проверяет ввод и повторяется до тех пор, пока от пользователя не будет получен допустимый ввод.
После цикла выбранный IP-адрес доступен в $ip
.
Если вы не хотите хранить свои адреса в массиве, вам придется вместо этого перечислить соответствующие переменные (это будет нелегко обобщить на N переменных,вот почему я предложил использовать массив в своем ответе на ваш другой вопрос):
select ip in "$ip1" "$ip2" "$ip3" "$ip4"; do...; done
Вы можете использовать группировку в GNUsed
sed -E 's/\.(\s)/.\n\1/g' file
Группировка ()
используется, когда мы хотим использовать часть совпадающего регулярного выражения позже.
Группы будут упорядочены, и вы сможете обращаться к ним по номеру, например здесь\1
-E
, чтобы включить расширенное регулярное выражение, чтобы избежать экранирования (
и)
sed
:
sed -E 's/\.([[:space:]]|$)/.\
\1/g'
С GNUsed
:
sed -E 's/\.(\s|$)/.\n\1/g'