Dirk
Dirk

Reputation: 471

regex to print out lines after hostname until delemiter

i have a list which goes as follows:

-------------------------------------------------------------------------------------------
www.mydomain.de                         UP                            Thu May  8 09:10:57 2014
              HTTPS                    OK                            Thu May  8 09:10:08 2014
              HTTPS-Cert         OK                            Thu May  8 09:10:55 2014
-------------------------------------------------------------------------------------------
www.someotherdomain.de                         UP                            Thu May  8 09:09:17 2014
              HTTPS                    OK                            Thu May  8 09:09:30 2014
              HTTPS-Cert         OK                            Thu May  8 09:11:10 2014
-------------------------------------------------------------------------------------------
www.somedifferentdomain.at                         UP                            Thu May  8 09:08:47 2014
              HTTPS                    OK                            Thu May  8 09:10:26 2014
              HTTPS-Cert         OK                            Thu May  8 09:11:13 2014
-------------------------------------------------------------------------------------------
www.foobladomain.de                         UP                            Thu May  8 09:09:17 2014
              HTTPS                    OK                            Thu May  8 09:09:30 2014
              HTTPS-Cert         OK                            Thu May  8 09:11:08 2014
-------------------------------------------------------------------------------------------
www.snafudomain.at                         UP                            Thu May  8 09:09:17 2014
              HTTP                     OK                            Thu May  8 09:09:42 2014
              HTTPS                    OK                            Thu May  8 09:10:10 2014
              HTTPS-Cert         OK                            Thu May  8 09:10:09 2014
-------------------------------------------------------------------------------------------
www.lolnotanotherdomain.de                         UP                            Thu May  8 09:06:57 2014
              HTTP                     OK                            Thu May  8 09:11:10 2014
              HTTPS                    OK                            Thu May  8 09:11:16 2014
              HTTPS-Cert         OK                            Thu May  8 09:11:10 2014

and i have a function which takes the hostname as parameter and prints it out:

please enter hostname to search for: www.snafudomain.at
www.snafudomain.at                         UP                            Thu May  8 09:09:17 2014

but what i want to archive is that the following lines after the hostname are printed out until the delimiter line "-----" the function i right now looks like this:

def getChecks(self,hostname):
    re0 = "%s" % hostname
    mylist = open('myhostlist', 'r')
    for i in mylist:
        if re.findall("^%s" % re0, str(i)):
        print i
        else:
        continue

is there some easy way to do this? If something is unclear please comment. Thanks in advance

edit

to clarify the output should look like this:

www.mydomain.de                         UP                            Thu May  8 09:10:57 2014
              HTTPS                    OK                            Thu May  8 09:10:08 2014
              HTTPS-Cert         OK                            Thu May  8 09:10:55 2014
-------------------------------------------------------------------------------------

just want to print out the lines from the searched domain name till the line with only minuses.

Upvotes: 1

Views: 68

Answers (2)

Midnighter
Midnighter

Reputation: 3881

How about not using regex at all?

def get_checks(self, hostname):
    record = False
    with open('myhostlist', 'r') as file_h:
        for line in file_h:
            if line.startswith(hostname):
                record = True
                print(line)
            elif line.startswith("---"):
                record = False
                print(line)
            elif record:
                print(line)

Upvotes: 1

thefourtheye
thefourtheye

Reputation: 239443

import re

def get_checks(hostname):
    pattern = re.compile(r"{}.*?(?=---)".format(re.escape(hostname)), re.S)
    with open("Input.txt") as in_file:
        return re.search(pattern, in_file.read())

print get_checks("www.snafudomain.at").group()

This will returns all the lines starting with www.snafudomain.at till it finds ---. The pattern generated will be like this

www\.snafudomain\.at.*?(?=---)

Online Demo

We use re.escape because your hostname has . in it. Since . has special meaning in the Regular Expressions, we just want the RegEx engine to treat . as literal dot.

Upvotes: 1

Related Questions