1

У меня есть файл hosts, полный хостов, вот так:

127.0.0.1 home-domain.net
127.0.0.1 here.home-domain.net
127.0.0.1 home-domain.netn
127.0.0.1 home.domain.net
127.0.0.1 home.domain.net.some

В скрипте оболочки пепла (BusyBox) я хочу только буквальное совпадение (я), у меня есть

match=home.domain.net
grep " $match$" file

Это правильно соответствует "home.domain.net", но также и "home-domain.net". Пространство, которое я использую в "$ match $", должно ограничить его началом имени хоста, в то время как $ - конец строки. Как я могу сопоставить только литерал "home.domain.net"?

1 ответ1

0

Как я могу сопоставить только литерал "home.domain.net"?

Вам нужно сбежать . символы, использующие \ . Тогда единственный специальный символ регулярного выражения - это второй $ .

match=home\.domain\.net
grep " $match$" file    

Пример:

$ cat file
127.0.0.1 home-domain.net
127.0.0.1 here.home-domain.net
127.0.0.1 home-domain.netn
127.0.0.1 home.domain.net
127.0.0.1 home.domain.net.some
$ match=home\.domain\.net
$ grep " $match$" file
127.0.0.1 home-domain.net
127.0.0.1 home.domain.net

Замечания:

  • 127.0.0.1 home-domain.net повторяется в вашем примере файла хоста.

Source grep - Поиск файлов для конкретного текста.


Дальнейшее чтение

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