Получение (не вырезание) определенной подстроки из строки bash - PullRequest
0 голосов
/ 02 ноября 2019

Я хотел бы получить подстроку 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

1 Ответ

0 голосов
/ 02 ноября 2019

Будет выведено значение NULL в случае, если VALUE1 или VALUE2 ни один из них не найден.

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

Пример получения NULL в выводе, если ни VALUE1, ни VALUE2:

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
...