#linux #bash #shell #awk #sed
#linux #bash #оболочка #awk #sed
Вопрос:
У меня есть следующий вывод из команды:
1 192.168.1.1 (192.168.1.1) 3.032 ms
2 172.26.0.15 (41.226.22.21) 53.825 ms
3 172.26.0.13 (172.26.0.13) 57.146 ms
4 193.95.19.137 (193.95.19.137) 60.792 ms
5 193.95.96.69 (193.95.96.69) 65.873 ms
Я хочу перенаправить поля каждой строки в переменные nbr
, host
, ip
и time
Я прочитал все строки с:
while read LINE; do
echo $LINE #How to redirect the line fields to vars
done < <(traceroute yahoo.fr)
Ответ №1:
Пример:
while read _ ip ip2 ms _; do
echo "$ip $ms ms"
done < <(traceroute yahoo.fr)
Где _
находится переменная-заполнитель.
Убрать круглые скобки, как в вашем комментарии :
% x='(127.0.0.1)'
% echo ${x//[)(]/}
127.0.0.1
это расширение параметра bash
Комментарии:
1. как извлечь
ip2
из()
?2. Одним из способов устранения скобок является использование
IFS="$IFS()"
3. @GillesQuenot По умолчанию IFS имеет длину в три символа: пробел, табуляция, перевод строки. Мы можем добавлять к нему по своему усмотрению. Кстати, изменение в IFS может быть сделано локально:
while IFS="$IFS()" read a ip ip2 ms b; do ....