как заменить на пробел?

Если вы используете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

0
22.06.2020, 04:43
2 ответа

Вы можете использовать группировку в GNUsed

sed -E 's/\.(\s)/.\n\1/g' file

Группировка ()используется, когда мы хотим использовать часть совпадающего регулярного выражения позже.

Группы будут упорядочены, и вы сможете обращаться к ним по номеру, например здесь\1

  • -E, чтобы включить расширенное регулярное выражение, чтобы избежать экранирования (и)
3
18.03.2021, 23:33

sed:

sed -E 's/\.([[:space:]]|$)/.\
\1/g'

С GNUsed:

sed -E 's/\.(\s|$)/.\n\1/g'
4
18.03.2021, 23:33

Теги

Похожие вопросы