Как получить текст между двумя словами, указанными их индексами?

Это то, что я обычно делаю в системе с FirewallD.

  1. Я сделал полную перезагрузку? firewall-cmd --complete-reload
  2. Находятся ли мои интерфейсы в правильных зонах? firewall-cmd --list-all --zone = internal и firewall-cmd --list-all --zone = external
  3. Когда FirewallD "остановлен", убедился ли я, что он действительно было остановлено? iptables -nvL и systemctl status firewalld.service
  4. Правила все еще отображаются? iptables -F

Это то, что я сделал бы, чтобы убедиться, что все, что вы настраиваете, отображается или работает правильно. Что-то мне подсказывает, что информация об интерфейсе скорее всего неверна. Если вам удалось добраться до пункта 4, а затем он начнет работать, я бы полностью начал с значений по умолчанию, которые есть у firewalld.

Примечание: если вы отключили Network Manager и используете --add-source, он не будет работать. Если это так, вам нужно вернуться к обычным iptables. Но в Fedora по умолчанию есть Network Manager.

5
26.11.2016, 15:43
2 ответа

С помощью gawk вы можете использовать функцию split () для определения полей и их разделителей:

$ echo "The quick brown fox   jumps over the lazy dog" | awk '{ split($0, a, "\\s+", s); for (i = 3; i <= 7 && i <= length(a); i++) printf "%s%s", a[i], (i < 7 ? s[i] : "\n") }'
brown fox   jumps over the
7
27.01.2020, 20:34

С perl

$ echo "The quick brown fox   jumps over the lazy dog"  | perl -F'(\h+)' -lane 'print @F[4..12]'
brown fox   jumps over the
  • -F '(\ h +)' , разделенным на символы пробела / табуляции, также сохраняется разделитель
  • print @F [4..12] печать требуемые индексы. Индекс массива perl начинается с 0 , и необходимо также учитывать разделитель. Простое правило: вычесть 1 и умножить на 2. Итак (3-1) * 2 = 4 и (7-1) * 2 = 12
4
27.01.2020, 20:34

Теги

Похожие вопросы