3

Следующая команда

grep -w '^[^#]* machine_VIP' /etc/hosts | head -1 | awk '{print $1}'

отлично работает на Linux (захватывает псевдоним machine_VIP и возвращает IP-адрес из /etc /hosts и игнорирует строки замечаний)

пример

cat /etc/hosts
5.5.5.5  GH_T  T1 T2 T3 # machine_VIP
# 198.2.3.12 MON1 MON2  machine_VIP
18.2.4.12 W1 # machine_VIP # machine_VIP # machine_VIP
192.9.200.77 machine_linux1 machine_linux2  machine_VIP
192.9.200.78 machine_linux10 machine_linux20 machine_VIP_test
grep -w '^[^#]* machine_VIP' /etc/hosts | head -1 | awk '{print $1}'
192.9.200.77

но в Solaris у меня те же хосты, и когда я запускаю команду, я ничего не получаю на выходе.

Итак, как приспособить команду к Solaris?

2 ответа2

2

В Solaris grep опция -w означает, что весь шаблон должен соответствовать только одному слову, что отличается от значения GNU grep для -w, что совпадение должно образовывать целые слова.

Если вы добавите $ в конец вашего шаблона, это будет работать с файлом примера выше, и тогда вам не понадобится ключ -w:

grep '^[^#]* machine_VIP$' /etc/hosts | head -1 | awk '{print $1}'

... или вы можете, конечно, установить GNU grep на вашу машину Solaris, если это возможно.

1

В Solaris 11 используйте уже установленный GNU grep: /usr/gnu/bin/grep

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .