Как найти регулярное выражение для точного совпадения в сценариях оболочки - PullRequest
1 голос
/ 13 июля 2020

У меня есть вывод команды kubernetes

kubectl get pods | grep eam-ui
eam-ui-hk8rk                       1/1     Running            0          43m
eam-ui-jn9jj                       1/1     Running            0          43m
eam-ui-v02-2vdlh                   1/1     Running            0          2d6h
eam-ui-v02-4gkxx                   1/1     Running            0          2d6h
eam-ui-v03-2hqjq                   1/1     Running            0          2d22h
eam-ui-v03-jv4w7                   1/1     Running            0          2d22h

Мне нужно сопоставить точную строку из первого столбца, например (eam-ui, eam-ui-v02, eam-ui-v03). Последние 5 буквенно-цифровых символов c будут меняться при каждом выполнении

Пробовал с -w и даже с опцией -F. Работает с v02 и v03. Работает. Но для eam-ui он соответствует всем

   $ kubectl get pods | grep -w eam-ui-v02
 eam-ui-v02-2vdlh                   1/1     Running            0          2d6h
 eam-ui-v02-4gkxx                   1/1     Running            0          2d6h

 kubectl get pods | grep -w eam-ui-v03


 eam-ui-v03-2hqjq                   1/1     Running            0          2d22h
 eam-ui-v03-jv4w7                   1/1     Running            0          2d22h
    
    
get pods | grep -w eam-ui
eam-ui-hk8rk                       1/1     Running            0          48m
eam-ui-jn9jj                       1/1     Running            0          48m
eam-ui-v02-2vdlh                   1/1     Running            0          2d6h
eam-ui-v02-4gkxx                   1/1     Running            0          2d6h
eam-ui-v03-2hqjq                   1/1     Running            0          2d22h
eam-ui-v03-jv4w7                   1/1     Running            0          2d22h

сверху, я хотел только

eam-ui-hk8rk                       1/1     Running            0          48m
eam-ui-jn9jj                       1/1     Running            0          48m

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Я предлагаю использовать awk, так как вам нужно проверить только первые значения поля:

# To check eam-ui
kubectl get pods | awk '$1 ~ /^eam-ui-[[:alnum:]]{5}$/'

# To check eam-ui-v02
kubectl get pods | awk '$1 ~ /^eam-ui-v02-[[:alnum:]]{5}$/'

# To check eam-ui-v03
kubectl get pods | awk '$1 ~ /^eam-ui-v03-[[:alnum:]]{5}$/'
 

Подробности

  • ^ - начало строки
  • eam-ui- - буквальный текст
  • [[:alnum:]]{5} - пять буквенно-цифровых символов c символов
  • $ - конец строки.

См. онлайн-демонстрацию

0 голосов
/ 13 июля 2020

Это исключает строки, содержащие v02 или v03: grep -v -e 'v0[2|3]' test.txt

...