Делать это с помощью цикла оболочки неудобно и подвержено ошибкам. Если ваш файл drinks.txt
содержит *
в отдельной строке (или в окружении пробелов ), он будет расширяться, например, до имен файлов в текущем каталоге.
Вместо этого просто используйтеgrep
:
grep -iF 'co' drinks.txt
Здесь мы используем grep
с -i
для выполнения -нечувствительного к регистру совпадения. Параметр -F
означает, что grep
должен использовать шаблон как строку , а не как регулярное выражение (здесь это не имеет значения, но будет иметь значение, если ваш шаблон содержал такие символы, как *
или .
или другие специальные символы регулярного выражения ).
Команда вернет каждую полную строку, содержащую строку co
, Co
, cO
или CO
.
Как часть скрипта:
#!/bin/sh
grep -iF -e "$1" drinks.txt
Здесь я использую -e
, чтобы сказать, что «следующий аргумент — это шаблон». Если бы я этого не сделал и $1
начинался с тире, это было бы воспринято как вариант grep
.
Чтобы принудительно найти совпадение в начале слова, вы должны использовать
grep -i -e '\b'"$1" drinks.txt
или
grep -i -e '\<'"$1" drinks.txt
Где \b
и \<
оба будут совпадать на границе слова. Обратите внимание, что здесь нам пришлось удалить параметр -F
, потому что наш шаблон теперь является регулярным выражением. Это также означает, что любые символы регулярных выражений в $1
будут специальными.
Кто-то на другом форуме указал мне на эту очень полезную диаграмму потока пакетов nftables:
Это очень помогло мне упорядочить свое мышление. Я еще не доработал правила, но я думаю, что правила для пакетов, которые пересекают мост между интерфейсами-членами, будут проходить в цепочке пересылки в семействе мостов, а затем правила для пакетов от интерфейса моста к локальному хосту. во входной цепочке в семействе inet, а правила для пакетов между мостами будут идти в цепочке пересылки в семействе inet.