Как цензурировать IP-адреса в файле с Python? - PullRequest
5 голосов
/ 07 мая 2010

У меня есть файл журнала, содержащий некоторые записи Whois с относительными IP-адресами, которые я хочу подвергнуть цензуре: 81.190.123.123 в 81.190.xxx.xxx.

Есть ли способ сделать такое преобразование и переписать содержимое файла без изменения остальных?

Спасибо за помощь!

Ответы [ 3 ]

3 голосов
/ 07 мая 2010

Как упомянуто выше, вы можете сделать это с помощью sed:

sed -E -e 's/([0-9]+\.[0-9]+)\.[0-9]+\.[0-9]+/\1.xxx.xxx/g'

При этом используется поиск по регулярному выражению для поиска IP-адресов и замены последних двух октетов на xxx.Используя переключатель -i, вы можете сделать все это сразу:

sed -i.bak -E -e 's/([0-9]+\.[0-9]+)\.[0-9]+\.[0-9]+/\1.xxx.xxx/g' file.txt
0 голосов
/ 07 мая 2010

Если вы хотите использовать Python, используйте модуль fileinput для построчной обработки файла или файлов.

import fileinput
for line in fileinput.input(["filename"], inplace=1, backup='.bak'):
    print processed(line)
fileinput.close()

fileinput с inplace = 1 переименует входной файл и прочитает из переименованного файла, направляя stdout в новый файл с тем же именем. Вы можете использовать параметр резервного копирования, чтобы предотвратить автоматическое удаление временного файла.

Если ввод важен, вам нужно позаботиться об обработке исключений, чтобы предотвратить потерю ввода в случае ошибки.

0 голосов
/ 07 мая 2010

Если Python на самом деле не является одним из ваших требований, это также решает проблему:

sed -i 's/\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.[0-9]\{1,3\}\.[0-9]\{1,3\}/\1.\2.xxx.xxx/g' mylogfile.log

Или Perl, который позволяет избавиться от большинства уродливых обратных косых черт:

perl -i -pe 's/(\d{1,3})\.(\d{1,3})\.\d{1,3}\.\d{1,3}/$1.$2.xxx.xxx/g' mylogfile.log

Но здесь нет флага "inline" -i.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...