@achirkov0

Grep — как сделать точное совпадение?

Есть данные из qm list:
100 srv1             running    16384            100.00 965
       101 srv2             running    12314            100.00 900
       1000 srv3              running    2048            100.00 85
       1001 srv4              running    2048           100.00 35
       10000 srv4              running    2048           100.00 480

Цель: получить третью колонку по номеру в первой. Текущий вариант:
sudo qm list | grep 100 | awk '{print $3}'
Если я делаю grep 100 - выведутся все. Но нужно получить только одно значение.
Попробовал grep -F 100 - без изменений.
Попробовал grep -w 100 - выводятся значения 100 и 101.
Как получить только одну строку?
  • Вопрос задан
  • 7144 просмотра
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Зачем тут grep? awk отлично умеет сравнивать, причём, в отличии от grep, может работать с отдельными полями, а не только с целой строкой.

sudo qm list | awk '{ if ($1 == 100) print $3}'
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
planc
@planc
можно использовать:
^ - начало строки
$ - конец строки

grep ^100$
Ответ написан
@divian
А самое простое - поместить после искомого в кавычки пробел ))
| grep "100 "
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Ubuntu
software engineer
просто grep находит в строках 100 в другом месте.
Напишите регулярку, которая будет искать первое 100, например начало строки, возможно пробелы и 100:
sudo qm list | grep  -P '^[ ]*100' | awk '{print $3}'


или 100, после которого не идет точка
sudo qm list | grep  -P '100[^.]' | awk '{print $3}'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы