简体   繁体   中英

Find a line of text with a pattern using Windows command line or Python

I need to run a command line tool that verifies a file and displays a bunch of information about it. I can export this information to a txt file but it includes a lot of extra data. I just need one line for the file:

"The signature is timestamped: Thu May 24 17:13:16 2012"

The time could be different, but I just need to extract this data and put it into a file. Is there a good way to do this from the command line itself or maybe python? I plan on using Python to locate and download the file to be verified, then run the command line tool to verify it so it can get the data then send that data in an email.

This is on a windows PC.

Thanks for your help

You don't need to use Python to do this. If you're using a Unix environment, you can use fgrep right from the command-line and redirect the output to another file.

fgrep "The signature is timestamped: " input.txt > output.txt

On Windows you can use:

find "The signature is timestamped: " < input.txt > output.txt

You mention the command line utility "displays" some information, so it may well be printing to stdout , so one way is to run the utility within Python, and capture the output.

import subprocess
# Try with some basic commands here maybe...
file_info = subprocess.check_output(['your_command_name', 'input_file'])
for line in file_info.splitlines():
    # print line here to see what you get
    if file_info.startswith('The signature is timestamped: '):
        print line # do something here

This should fit in nicely with the "use python to download and locate" - so that can use urllib.urlretrieve to download (possibly with a temporary name), then run the command line util on the temp file to get the details, then the smtplib to send emails...

In python you can do something like this:

timestamp = ''
with open('./filename', 'r') as f:
  timestamp = [line for line in f.readlines() if 'The signature is timestamped: ' in line]

I haven't tested this but I think it'd work. Not sure if there's a better solution.

I'm not too sure about the exact syntax of this exported file you have, but python's readlines() function might be helpful for this.

h=open(pathname,'r') #opens the file for reading
for line in h.readlines():
    print line#this will print out the contents of each line of the text file

If the text file has the same format every time, the rest is easy; if it is not, you could do something like

for line in h.readlines():
    if line.split()[3] == 'timestamped':
         print line
         output_string=line

as for writing to a file, you'll want to open the file for writing, h=open(name, "w") , then use h.write(output_string) to write it to a text file

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM