从 bash 字符串中获取(不剪切)特定子字符串

Getting (not cutting) specific substring from bash string

我想从字符串 "VALUE3,VALUE2,VALUE4,VALUE9" 中获取子字符串 VALUE1 或 VALUE2,如果有 none 个,那么我的 $VAR 应该为空。

我的字符串不能同时有两个子字符串,所以我们只有 3 种可能性。

VAR=VALUE1 VAR=VALUE2 VAR=NULL

我想像这样在一行中完成:

STRING="VALUE3,VALUE2,VALUE4,VALUE9,VALUE7"
VAR=`echo $STRING | grep -P "(VALUE1|VALUE2)"`
echo $VAR
VALUE2

如果找到 VALUE1VALUE2 none 个,这将打印 NULL。

echo "VALUE3,VALUE1,VALUE4,VALUE9" | awk '
{
  if(match([=10=],/VALUE[12],|VALUE[12]$/)){
    val=substr([=10=],RSTART,RLENGTH)
    sub(/,/,"",val)
    print val
  }
  else{
    print "NULL"
  }
}'

或将其放入变量中,如:

VAR=$(echo "VALUE3,VALUE1,VALUE4,VALUE9" | awk '{if(match([=11=],/VALUE[12],|VALUE[12]$/)){val=substr([=11=],RSTART,RLENGTH);sub(/,/,"",val);print val} else{print "NULL"}}')
echo "$VAR"
VALUE1

在既不是 VALUE1 也不是 VALUE2 的情况下在输出中获得 NULL 的示例:

VAR=$(echo "VALUE3,VALUE12,VALUE4,VALUE9" | awk '{if(match([=12=],/VALUE[12],|VALUE[12]$/)){val=substr([=12=],RSTART,RLENGTH);sub(/,/,"",val);print val} else{print "NULL"}}')
echo "$VAR"
NULL