@s_pyanov

Bash: while read line + sed. Как присвоить 2-м переменным разные части строки?

Добрый день всем.
У меня задача:
есть входящий файл, состоит из строк подобного рода
host-ivan,10.70.0.1 #Хост Иванова
host-petr,10.70.0.2 #Хост Петрова
host-sid,10.70.0.3 #Хост Сидорова

Задача написать функцию которая будет читать этот файл, заносит в переменную X часть строки до знака 'запятая', а в переменную Y будет заноситься IP адрес из той-же строки. Т.е x=host-ivan y=10.70.0.1

Пробую сделать через while
while read line
do
        x=$(sed -r 's/,.+//')                    #Вырезаем первую часть строки до запятой
        y=$(sed 's|.*,||' | sed -r 's/#.+//')    #Вырезаем кусок от запятой до # (IP адрес)
        echo "$x$y" \
done <list


При выполнении получаю только результат выполнения x=$(sed -r 's/,.+//') строка y=$(sed 's|.*,||' | sed -r 's/#.+//') игнорируется, если комментирую Х, то отрабатывает строка с Y

Получается, что первая строка в цикле ВЫРЕЗАЕТ все из строки и для Y остается пустая строка?
Я не до конца понимаю, что конкретно происходит со значением line на каждом этапе выполнения, кто может подсказать как мне реализовать свою функцию?

Может while не подходит для этого? Или sed?
  • Вопрос задан
  • 1209 просмотров
Решения вопроса 1
3vi1_0n3
@3vi1_0n3
Не надо sed. На чистом баше:
#!/bin/bash

IFS='
'
(
while read line
do
    line=${line%% *}
    x=${line%,*}
    y=${line##*,}
    echo $x
    echo $y
done
) < file.txt
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@S_SN
А кто тебе мешает взять не "line", а любую переменную
и с ней работать как захочешь
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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