получить части строки, используя сценарий оболочки

У меня есть одна строка как

/ip/192.168.0.1/port/8080/ 

Я хочу получить две отдельные переменные, которые будут содержать порт и IP-адрес

как. 192.168.0.1 и 8080

как я знаю / ip / и / port / будет всегда, я получил Ip следующим образом,

 expr /ip/192.168.0.1/port/8080/ : '/ip/\(.*\)/port/' 

это выведет 192.168.0.1 просто не знаю, как получить порт, я пробовал аналогичную команду,

 expr /ip/192.168.0.1/port/8080/ : '/port/\(.*\)/' 

но он не дает порт .. как получить порт также.

6 Solutions collect form web for “получить части строки, используя сценарий оболочки”

Вы можете использовать awk:

awk -F\/ '{print $2"="$3, $4"="$5}' input_file

с входным файлом или просто по строкам.

Вы можете просто использовать cut следующим образом:

 cut -d '/' -f 3,5 

Пример:

 $ echo '/ip/192.168.0.1/port/8080/' | cut -d '/' -f 3,5 192.168.0.1/8080 

Это вырезается с помощью разделителя / и печатает 3-й и 5-й поля.

Или, может быть, вы захотите:

 $ echo ip=`cut -d '/' -f 3 input_file` port=`cut -d '/' -f 5 input_file` ip=192.168.0.1 port=8080 

Еще один чистый метод bash с использованием массивов:

 $ s="/ip/192.168.0.1/port/8080/" # initial string $ a=(${s//// }) # substitute / with " " and make array $ echo ${a[1]} # Array index 1 (zero-based indexing) 192.168.0.1 $ echo ${a[3]} # Array index 3 (zero-based indexing) 8080 $ 

Или аналогично приведенному выше, но используя IFS вместо расширения параметров для разделения строки:

 $ OLDIFS="$IFS" # save IFS $ IFS="/" # temporarily set IFS $ a=($s) # make array from string, splitting on "/" $ IFS="$OLDIFS" # restore IFS $ echo "${a[2]}" # Array index 2 192.168.0.1 $ echo "${a[4]}" # Array index 4 8080 $ 

Обратите внимание, что этот метод потенциально более общий, чем два других в этом ответе, поскольку он должен работать, если интересующие поля содержат пробелы.


Или используя позиционные параметры:

 $ s="/ip/192.168.0.1/port/8080/" # initial string $ set -- ${s//// } # substitute / with " " and assign params $ echo $2 # Param 2 192.168.0.1 $ echo $4 # Param 4 8080 $ 
 expr /ip/192.168.0.1/port/8080/ : '.*/port/\(.*\)/' 

.* соответствует начальной части строки перед /port

С bash

 s=/ip/192.168.0.1/port/8080/ IFS=/ read -r _ _ ip _ port <<<"$s" echo "$ip" 192.168.0.1 echo "$port" 8080 

Это еще один способ

 $ cut -d '/' -f 3,5 <<< "/ip/192.168.0.1/port/8080/"|tr -s '/' ' ' 192.168.0.1 8080 
  • Настройка пользовательской скорости передачи на консоли
  • Команда Unix zip обновляет существующий архив, а не создает новый
  • Принимая аргументы оболочки и обновляя значения
  • Как сохранить содержимое переменной после трубы
  • Цикл forach для вывода ls
  • Как фильтровать массив строк в ksh
  • возможно ли добавить запятую в этот SQL?
  • Как правильно запустить программу и сделать возможным перенаправить свой текущий выход (stdout и stderr) на более поздний этап?
  • Устранение неполадок команды grep
  • Независимый от оболочки путь к cp dotfiles из папки в другую
  • Как копировать и переименовывать файлы, найденные в функции «найти» Linux?
  • другая оболочка для пользователя root и non-root
  • Interesting Posts

    Найти соответствующие MD5 и XML в каталоге

    Использование скрипта Fifo

    Неожиданный конец ошибки файла при выполнении скрипта

    SSH по IPvanish

    объединить два разных файла, имеющих различное количество строк строк

    Как узнать, заражен ли мой компьютер вирусом макроса?

    Hewlett-Packard ScanJet 2200c на Scientific Linux 6.1 64bit

    Как изменить поведение по умолчанию с двумя мониторами Fedora 14 (без клона)

    специальные строки grep / awk, основанные на определенных полях; с использованием переменной ksh с awk

    Добавить пользователя для Postgres на Mac

    Проверка типа NAT

    Как настроить w3m на использование прокси-сервера squid (или любого прокси-сервера) по умолчанию при вызове конкретного пользователя?

    Создание правила udev для клавиатуры bluetooth

    Нажатие вкладки после файла сценария sourcing печатает результат, связанный с скриптом

    Гостевые дополнения «не могут найти программу» Kali Linux 2.0

    Linux и Unix - лучшая ОС в мире.