Как получить 2 строки между определенными символами в Bash - PullRequest
0 голосов
/ 21 октября 2019

Строка:

echo "40125512|abcd32External_SOC=ALPHA3;PCRFabcran"

Я хочу захватить все до первого экземпляра |и все между External_SOC и; PCRF. И сохраните их как две разные переменные, если это возможно.

x=40125512
y=ALPHA3

Это дает мне следующее:

sed -e 's/|.*External_SOC=\(.*\);PCRF.*/\1/'

40125512ALPHA3

1 Ответ

1 голос
/ 21 октября 2019

РЕДАКТИРОВАТЬ: В соответствии с OP это должно быть сделано в одной строке создание 2 переменных, если это так, то попробуйте следующее.

read -r x y <<<$(echo "40125512|abcd32External_SOC=ALPHA3;PCRFabcran" | sed 's/\([^|]*\).*=\([^;]*\).*/\1 \2/')
echo "$x"
40125512
echo "$y"
ALPHA3

ИЛИ используйте следующее согласно комментарию сэра анубхава:

read x y < <(sed -E 's~^([^|]+)\|.*External_SOC=(.+);PCRF.*~\1 \2~' <<< "40125512|abcd32External_SOC=ALPHA3;PCRFabcran")


Не могли бы вы попробовать следующее. Можно использовать его из двух отдельных команд для создания двух отдельных переменных.

x=$(echo "40125512|abcd32External_SOC=ALPHA3;PCRFabcran" | sed 's/\([^|]*\).*/\1/')
echo "$x"
40125512

y=$(echo "40125512|abcd32External_SOC=ALPHA3;PCRFabcran" | sed 's/.*=\([^;]*\).*/\1/')
echo "$y"
ALPHA3
...