首页 > 解决方案 > 从 bash 字符串获取(不切割)特定子字符串

问题描述

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

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

VAR=VALUE1 VAR=VALUE2 VAR=NULL

我想在一行中做到这一点:

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

标签: bashawksedcut

解决方案


这将打印 NULL 以防万一VALUE1VALUE2找不到它们。

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

或将其用于变量用途,例如:

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

在 not和的情况下获取NULL输出的示例:VALUE1VALUE2

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

推荐阅读