从 unix 中的字符串中提取特定的字符串值
extract particular string value from string in unix
假设我有一个字符串,我需要从中提取特定的键值。
示例字符串:17=TEST,90=BALANCE,45=SALARY,23=ULIP,20=PLAN,33=CREDIT,11=555
并考虑如果我想从上面的字符串中单独获取 45 和 20 的值,我该如何获取它?一种方法是基于 ,(逗号)拆分并将其作为数组获取,然后搜索键,如果匹配再次基于“=”拆分。
但是有什么简单的命令可以执行这个任务吗?提前致谢..
POSIX
让我们定义您的字符串:
$ s='17=TEST,90=BALANCE,45=SALARY,23=ULIP,20=PLAN,33=CREDIT,11=555'
现在,让我们提取 45
的值:
$ echo "$s" | awk -F= '==45{print }' RS=,
SALARY
对于20
:
$ echo "$s" | awk -F= '==20{print }' RS=,
PLAN
这通过使用带有 ,
作为记录分隔符和 =
作为字段分隔符的 awk 来实现。我们 select 记录其第一个字段是我们想要的值,在本例中为 45 或 20,然后打印第二个字段。
反向搜索:
$ echo "$s" | awk -F= '=="SALARY"{print }' RS=,
45
bash
如果我们使用 bash,那么我们可以使用 here-string 而不是管道:
$ awk -F= '==20{print }' RS=, <<<"$s"
PLAN
或:
$ awk -F= '=="PLAN"{print }' RS=, <<<"$s"
20
这是实现您目标的sed
方法,
$ s="17=TEST,90=BALANCE,45=SALARY,23=ULIP,20=PLAN,33=CREDIT,11=555"
$ sed -E 's/.*,45=([A-Z]+),.*//g' <<< "$s"
SALARY
$ sed -E 's/.*,20=([A-Z]+),.*//g' <<< "$s"
PLAN
或grep
解,
$ grep -oP '45=\K\w+' <<< "$s"
SALARY
$ grep -oP '20=\K\w+' <<< "$s"
PLAN
假设我有一个字符串,我需要从中提取特定的键值。
示例字符串:17=TEST,90=BALANCE,45=SALARY,23=ULIP,20=PLAN,33=CREDIT,11=555
并考虑如果我想从上面的字符串中单独获取 45 和 20 的值,我该如何获取它?一种方法是基于 ,(逗号)拆分并将其作为数组获取,然后搜索键,如果匹配再次基于“=”拆分。
但是有什么简单的命令可以执行这个任务吗?提前致谢..
POSIX
让我们定义您的字符串:
$ s='17=TEST,90=BALANCE,45=SALARY,23=ULIP,20=PLAN,33=CREDIT,11=555'
现在,让我们提取 45
的值:
$ echo "$s" | awk -F= '==45{print }' RS=,
SALARY
对于20
:
$ echo "$s" | awk -F= '==20{print }' RS=,
PLAN
这通过使用带有 ,
作为记录分隔符和 =
作为字段分隔符的 awk 来实现。我们 select 记录其第一个字段是我们想要的值,在本例中为 45 或 20,然后打印第二个字段。
反向搜索:
$ echo "$s" | awk -F= '=="SALARY"{print }' RS=,
45
bash
如果我们使用 bash,那么我们可以使用 here-string 而不是管道:
$ awk -F= '==20{print }' RS=, <<<"$s"
PLAN
或:
$ awk -F= '=="PLAN"{print }' RS=, <<<"$s"
20
这是实现您目标的sed
方法,
$ s="17=TEST,90=BALANCE,45=SALARY,23=ULIP,20=PLAN,33=CREDIT,11=555"
$ sed -E 's/.*,45=([A-Z]+),.*//g' <<< "$s"
SALARY
$ sed -E 's/.*,20=([A-Z]+),.*//g' <<< "$s"
PLAN
或grep
解,
$ grep -oP '45=\K\w+' <<< "$s"
SALARY
$ grep -oP '20=\K\w+' <<< "$s"
PLAN