Инициализировать несколько переменных bash выводом одной команды

Использование sed:

sed -E 's/^([^,]*,)*([^,]*)(,[^,]*){1}$/\2/' infile

Выход:

d
i
n

Пояснение

  • ([^,]*,)*соответствует любому количеству символов запятой, отличных от -, за которыми следует запятая, т. е. любому количеству столбцов.
  • ([^,]*)соответствует столбцу.
  • (,[^,]*){1}соответствует одному столбцу в конце, если вы измените квантификатор {1}на {2}, он будет соответствовать третьему столбцу с конца и т. д.
2
23.03.2021, 10:12
1 ответ

Если у вас есть пустая строка, использование IFSне сработает, потому что несколько \nсжаты.

Однако вы можете использоватьreadarray:

readarray -t arr < <(python init.py)
echo "A='${arr[0]}', B='${arr[1]}', C='${arr[2]}', D='${arr[3]}'"

Добавьте -d ''для разделения на\0:

readarray -d '' -t arr < <(python init.py)

Изman bash:

-d The first character of delim is used to terminate each input line, rather than newline. If delim is the empty string, mapfile will terminate a line when it reads a NUL character.

5
28.04.2021, 22:57

Теги

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