Возврат только части строки после шаблона соответствия

Это - действительно факт жизни. Можно установить инструменты для отфильтровывания хостов, которые нападают на Вас после нескольких неудачных попыток.

DenyHosts анализирует Ваши файлы журнала и автоматически добавляет взломщиков к Вашему /etc/hosts.deny файл.

Проверьте документацию, как настроить ее для Ваших потребностей.

Обновление: некоторые важные моменты предлагаются в комментариях

  • обязательно правильно настройте инструменты как DenyHosts, так как Вы могли заблокировать себя (например, можно настроить машину или сеть, которая никогда не фильтруется),

  • DenyHosts не увеличивает Вашу безопасность системы: это только фильтрует нападения на уровне IP (это могло бы уменьшить нагрузку на маленькие машины и уменьшить размер файлов журнала, но ничего больше),

3
08.11.2011, 01:47
3 ответа

Самый простой путь состоял бы в том, чтобы использовать awk.

awk '/^Result: / {print $2}' file_name

Это соответствует строкам, которые начинаются Result:, и печатает второе поле в файле, как определено $IFS по умолчанию, который является пробелом.

7
27.01.2020, 21:10
  • 1
    Позади двоеточия существует пробел : и afaik, слово, прежде чем следующее двоеточие ищется. –  user unknown 07.11.2011, 06:39
  • 2
    OP не упоминает второе двоеточие. Просто то, что строка, происходящая между Result: и следующее пространство - то, что желаемо. Awk будет значением по умолчанию разбивать строку на пробел. $1 = "Результат": 2$ = следующее слово. Который является тем, что OP запросил извлечь. –  Tim Kennedy 07.11.2011, 07:10
  • 3
    Извините - я имел в виду 'перед следующим blank'. Ваша команда заканчивается для строки Result:two bla nk в bla. –  user unknown 07.11.2011, 07:29
  • 4
    я обновил свой пример для специфического включения пространства после двоеточия после Result: . Это будет теперь игнорировать строки как этот в Вашем примере и более тесно соответствовать начальному запросу OP. –  Tim Kennedy 07.11.2011, 07:40

Походит на то, что Вы хотите:

sed -ne 's/^Result: \([^ ]*\).*/\1/p' file_name

Соответствия против строки с "Результатом": и печатает первое слово после него. Другие строки не отображены.

3
27.01.2020, 21:10
  • 1
    OP указал что "Результат": имеет только одно возникновение в файле. Это могло быть привязано с ^, но является ненужным. –  Arcege 07.11.2011, 08:29
tillblank=$(egrep -o "^Result: [^ ]* " file)
echo ${tillblank/*:/}

egrep-o только производит шаблон, который Вы искали. Следующая строка удаляет все до двоеточия.

0
27.01.2020, 21:10
  • 1
    OP просит получать только слово после "Результата": не вся строка. –  Arcege 07.11.2011, 08:30
  • 2
    Да - первая строка каждый захватывает шаблон соответствия, и вторая строка удаляет "Результат": с начала. Разве это не работает на Вас? Что Вы получаете? –  user unknown 07.11.2011, 20:23
  • 3
    Если строка Result: 2 apples, затем Ваш, добрался бы 2 apples, нет 2 как предложенный OP. –  Arcege 08.11.2011, 02:46
  • 4
    egrep-o только захватывает Result: 2 - вторая строка удаляет Result:. Вы тестировали его? Вы должны! –  user unknown 08.11.2011, 03:45

Теги

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