考虑我有一个字符串,我需要提取特定的键值。
示例字符串:17=TEST,90=BALANCE,45=SALARY,23=ULIP,20=PLAN,33=CREDIT,11=555
如果我想从上面的字符串中单独获得 45 和 20 的值,我该如何获得它?一种方法是基于(逗号)进行拆分并将其作为数组进行分割,然后搜索密钥,如果匹配则再次根据“=”进行拆分。
但是有没有简单的命令来执行此任务?提前谢谢..
答案 0 :(得分:2)
让我们定义你的字符串:
$ s='17=TEST,90=BALANCE,45=SALARY,23=ULIP,20=PLAN,33=CREDIT,11=555'
现在,让我们提取45
:
$ echo "$s" | awk -F= '$1==45{print $2}' RS=,
SALARY
对于20
:
$ echo "$s" | awk -F= '$1==20{print $2}' RS=,
PLAN
这可以使用awk,其中,
作为记录分隔符,=
作为字段分隔符。我们选择第一个字段是我们想要的值的记录,在本例中为45或20,然后打印第二个字段。
相反地搜索:
$ echo "$s" | awk -F= '$2=="SALARY"{print $1}' RS=,
45
如果我们使用bash,那么我们可以使用here-string而不是管道:
$ awk -F= '$1==20{print $2}' RS=, <<<"$s"
PLAN
或者:
$ awk -F= '$2=="PLAN"{print $1}' RS=, <<<"$s"
20
答案 1 :(得分:1)
这是实现目标的sed
方法,
$ s="17=TEST,90=BALANCE,45=SALARY,23=ULIP,20=PLAN,33=CREDIT,11=555"
$ sed -E 's/.*,45=([A-Z]+),.*/\1/g' <<< "$s"
SALARY
$ sed -E 's/.*,20=([A-Z]+),.*/\1/g' <<< "$s"
PLAN
或grep
解决方案,
$ grep -oP '45=\K\w+' <<< "$s"
SALARY
$ grep -oP '20=\K\w+' <<< "$s"
PLAN