Парсинг ТХТ файла

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Dark~Angel, 17 Dec 2016.

  1. Dark~Angel

    Dark~Angel Member

    Joined:
    25 Apr 2010
    Messages:
    308
    Likes Received:
    76
    Reputations:
    8
    Собственно как выдрать только ИП и пароль с логином в отдельный файл. Вот пример
    Code:
     
    84.180.235.157   80   1531   Done   admin:6236556   DVR
    87.115.242.445   80   172   Done   admin:4645645  DVR
    87.410.272.259   80   141   Done   admin:126535   DVR
     
  2. Payer

    Payer Elder - Старейшина

    Joined:
    14 May 2010
    Messages:
    1,061
    Likes Received:
    5,202
    Reputations:
    63
    Редактор таблиц с этим справляется за 5 сек
    Тот же Excel
     
  3. Dark~Angel

    Dark~Angel Member

    Joined:
    25 Apr 2010
    Messages:
    308
    Likes Received:
    76
    Reputations:
    8
    Хотел бы это сделать в C++
     
  4. erwerr2321

    erwerr2321 Elder - Старейшина

    Joined:
    19 Jun 2015
    Messages:
    4,234
    Likes Received:
    26,241
    Reputations:
    147
  5. totenkopf

    totenkopf Elder - Старейшина

    Joined:
    19 Jul 2010
    Messages:
    92
    Likes Received:
    64
    Reputations:
    19
    Могу предложить на perl
    Code:
    #!/usr/bin/perl
    
    open(IF,"input.txt");
    open(OF,">output.txt");
    
    while(<IF>){
    if(/^([0-9\.]{7,15}).*\s([^\s]*\:[^\s]*).*/iu){
    print OF "$1:$2\n";
    }
    }
    
     
    Juy0, #colorblind and Dark~Angel like this.
  6. Dark~Angel

    Dark~Angel Member

    Joined:
    25 Apr 2010
    Messages:
    308
    Likes Received:
    76
    Reputations:
    8
    Спасибо, а можно пожалуйста с комментариями ?
     
  7. totenkopf

    totenkopf Elder - Старейшина

    Joined:
    19 Jul 2010
    Messages:
    92
    Likes Received:
    64
    Reputations:
    19
    С удовольствием

    Code:
    #!/usr/bin/perl
    
    open(IF,"input.txt"); #открываем файл источник
    open(OF,">output.txt"); #файл куда пишем результат открываем на запись ">"
    
    while(<IF>){ #пока читаются строки из файла каждая строка помещается в специальную переменный $_
    
    if(/^([0-9\.]{7,15}).*\s([^\s]*\:[^\s]*).*/iu){ #Переменная $_ обрабатывается регулярным выражением
    
    #регулярка: фрагменты которые нам нужны выделяются круглыми скобками
    
    # "/"-ограничитель "^"-начало строки "([0-9\.]{7,15})"-цифры и знак "." в количестве от 7 до 15 = IP адрес
    # ".*"-любое количество любых символов "\s"-пробел
    # "[^\s]*\:[^\s]*"-любые символы (любое количество "*") кроме пробела "\s" разделенные знаком ":" ("^"-отрицание если внутри квадратных скобок)
    # ".*"-любое количество любых символов до конца строки
    # "/iu"-ограничитель регулярки  "i"-регистр не важен "u"-unicode
    
    print OF "$1:$2\n"; #печать нужных фрагментов по номерам в файл. OF-файловый дескриптор
    }
    }
    
     
    Juy0, Dark~Angel, erwerr2321 and 2 others like this.
  8. Dark~Angel

    Dark~Angel Member

    Joined:
    25 Apr 2010
    Messages:
    308
    Likes Received:
    76
    Reputations:
    8
    Очень вам благодарен!
     
  9. Tmye

    Tmye Member

    Joined:
    24 Nov 2015
    Messages:
    17
    Likes Received:
    6
    Reputations:
    1
    Тоже нужно регулярное выражение для Notepad++. Мне нужны только IP в столбик. Я уже кое-что нашел. Например, такое выражение "([0-9]{1,3}[\.]){3}[0-9]{1,3}" но оно удаляет все IP, а мне нужно наоборот оставить IP и удалить лишнее. Еще есть вот такое " addr.*$ оно удаляет все справа.

    Code:
    <host endtime="1480105338"><address addr="118.184.44.177" addrtype="ipv4"/><ports><port protocol="tcp" portid="8000"><state state="open" reason="syn-ack" reason_ttl="48"/></port></ports></host>
    <host endtime="1480105338"><address addr="118.184.44.145" addrtype="ipv4"/><ports><port protocol="tcp" portid="8000"><state state="open" reason="syn-ack" reason_ttl="48"/></port></ports></host>
    <host endtime="1480105338"><address addr="118.192.160.38" addrtype="ipv4"/><ports><port protocol="tcp" portid="8000"><state state="open" reason="syn-ack" reason_ttl="104"/></port></ports></host>
    <host endtime="1480105339"><address addr="120.40.113.13" addrtype="ipv4"/><ports><port protocol="tcp" portid="8000"><state state="open" reason="syn-ack" reason_ttl="44"/></port></ports></host>
     
  10. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    632
    Likes Received:
    245
    Reputations:
    42
    Сначала ищешь и заменяешь на пустоту <host.*?addr=" а затем " addr.*$
     
    Tmye likes this.
  11. Octavian

    Octavian Elder - Старейшина

    Joined:
    8 Jul 2015
    Messages:
    506
    Likes Received:
    101
    Reputations:
    25
    Notepad++ > CTRL+ALT Выделяешь столбец и удаляешь ненужные
     
    #11 Octavian, 22 Dec 2016
    Last edited: 22 Dec 2016
  12. Tmye

    Tmye Member

    Joined:
    24 Nov 2015
    Messages:
    17
    Likes Received:
    6
    Reputations:
    1
    Благодарю работает.
     
  13. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    Как вариант, еще так можно:
    Code:
    .*?(([0-9]{1,3}[\.]){3}[0-9]{1,3}).*
    group $1:
    Code:
    118.184.44.177
    118.184.44.145
    118.192.160.38
    120.40.113.13
    
     
    Tmye likes this.