sed + текст в определенной строке после IP - PullRequest
0 голосов
/ 25 октября 2010

В моем журнале proftpd есть строка (точнее, строка 78)

Deny from 1.2.3.4

У меня также есть скрипт, который просматривает мои журналы для людей, использующих атаки методом грубой силы, и затем сохраняет их IP (готовый для черного списка). То, с чем я борюсь, это вставка (предположим, с помощью sed) в конце этой конкретной строки - вот что я получил до сих пор:

sed "77i3.4.5.6" /opt/etc/proftpd.conf >> /opt/etc/proftpd.conf

Теперь можно предположить, что это будет работать идеально, однако на самом деле это происходит следующим образом (строки с 77 по 78):

3.4.5.6
Deny from 1.2.3.4

Я подозреваю, что это из-за моей устаревшей версии sed, есть ли другие способы добиться того же? Кроме того, >> вызывает дублирование конфигурации в конце поля (опять же, я уверен, что это ограничение моей версии sed). Это работает ядро ​​доморощенного Linux на моем NAS. Варианты Sed ниже:

root @ NAS: ~ # sed BusyBox v1.7.0 (2009-04-29 19:12:57 JST) мульти-вызов двоичный

Использование: sed [-efinr] pattern [files ...]

Опция: -e скрипт Добавить скрипт к командам, которые будут выполнены -f scriptfile Добавить содержимое файла сценария в команды, которые будут выполнены -i Редактировать файлы на месте -n Подавить автоматическую печать пространства шаблона -r Использовать расширенный синтаксис регулярного выражения

Если не указано -e или -f, первый неопционный аргумент принимается как Сценарий для интерпретации. Все остальное аргументы - это имена входных файлов; если входные файлы не указаны, затем стандартный ввод читается. Исходные файлы не будет изменен, если опция -i дается.

Приветствую вас, ребята, за помощь.

1 Ответ

2 голосов
/ 25 октября 2010

Это не имеет ничего общего с версией sed;это просто старый «Делать это неправильно».

sed -i '77s/$/,3.4.5.6/' /opt/etc/proftpd.conf
...