首页 > 解决方案 > 如何在bash中的某些字符之间获取2个字符串

问题描述

细绳:

echo "40125512|abcd32External_SOC=ALPHA3;PCRFabcran"

我想在 | 的第一个实例之前抓住一切 以及 External_SOC 和 ;PCRF 之间的所有内容。如果可能,将它们存储为 2 个不同的变量。

x=40125512
y=ALPHA3

这给了我以下信息:

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

40125512ALPHA3

标签: linuxbashsed

解决方案


编辑:根据 OP,如果是这种情况,则需要在单行创建 2 个变量中完成,然后尝试以下操作。

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

或根据 anubhav 先生的评论使用以下内容:

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


请您尝试以下操作。可以从 2 个单独的命令中使用它来创建 2 个单独的变量。

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

推荐阅读