Что касается того, что не так с вашим скриптом, вы заменяете A
или a
на AB
и D
или d
на DK
, поэтому любые ранее существовавшие B
или K
не будут затронуты; sed
не ищет его. Вы можете поставить необязательный [bB]
или [kK]
, используя ?
(ноль или один из предшествующих символов), чтобы заставить sed заменить и этот символ, если он встретится.
Чтобы убедиться, что замена происходит только если за [aA]
или [aA][bB]
и т.д. следует число, вы можете добавить число к шаблону и добавить его обратно в замену с помощью ()
и \1
sed -r 's/ab?([0-9])/AB\1/Ig;s/dk?([0-9])/DK\1/Ig' filename
Я использую -r
для использования ERE (поэтому не нужно экранировать ?
) и I
для поиска без учета регистра вместо использования классов символов.
AGH! Известные слова,
Единственное существенное различие между моим неработающим хозяином и моим рабочим хозяином - это ...
... потому что в нем лежат драконы!
AGH! Известные предположения,
... Но ...
... ибо в этом корень всей путаницы!
Проблема заключается в сетевой фильтрации обратного пути Linux. Проблема в том, что пакеты поступают через интерфейс, и таблица маршрутизации видит, что адрес отправляющего хоста должен приходить / проходить через другой интерфейс (на котором лежит маршрутизатор по умолчанию). Следовательно, ядро отбрасывало пакеты и не отправляло их моему приложению.
Отчеты IGMP были отправлены, потому что я сказал socat, какой интерфейс мне следует использовать. И маршрутизаторы и коммутаторы послушно настроили многоадресную рассылку, чтобы идти именно туда, куда я сказал. В конечном итоге недовольным было ядро.
Дешевое и непростое решение - использовать sysctl для изменения net.ipv4.conf.all.rp_filter
с 1
на 0
, но это могло вызвать непредвиденные последствия, если вы не будете осторожны (пакеты не в порядке, получение пакетов, которые вам не нужны, пакеты приходят на неправильный интерфейс). Лучше убедиться, что таблица маршрутизации отражает реальность того, что вы пытаетесь сделать. Итак, другое исправление - установить / etc / sysconfig / network-scripts / route-iface
так, чтобы в нем был источник или сетевой маршрут специально для IP-адреса многоадресного отправителя на этом конкретном iface (т. Е. eth1
или что у вас).