Search code examples
pythonlinuxbashgrepcut

cat, grep and cut - translated to python


maybe there are enough questions and/or solutions for this, but I just can't help myself with this one question: I've got the following command I'm using in a bash-script:

var=$(cat "$filename" | grep "something" | cut -d'"' -f2)    

Now, because of some issues I have to translate all the code to python. I never used python before and I have absolutely no idea how I can do what the postet commands do. Any ideas how to solve that with python?


Solution

  • You need to have better understanding of the python language and its standard library to translate the expression

    cat "$filename": Reads the file cat "$filename" and dumps the content to stdout

    |: pipe redirects the stdout from previous command and feeds it to the stdin of the next command

    grep "something": Searches the regular expressionsomething plain text data file (if specified) or in the stdin and returns the matching lines.

    cut -d'"' -f2: Splits the string with the specific delimiter and indexes/splices particular fields from the resultant list

    Python Equivalent

    cat "$filename"  | with open("$filename",'r') as fin:        | Read the file Sequentially
                     |     for line in fin:                      |   
    -----------------------------------------------------------------------------------
    grep 'something' | import re                                 | The python version returns
                     | line = re.findall(r'something', line)[0]  | a list of matches. We are only
                     |                                           | interested in the zero group
    -----------------------------------------------------------------------------------
    cut -d'"' -f2    | line = line.split('"')[1]                 | Splits the string and selects
                     |                                           | the second field (which is
                     |                                           | index 1 in python)
    

    Combining

    import re
    with open("filename") as origin_file:
        for line in origin_file:
            line = re.findall(r'something', line)
            if line:
               line = line[0].split('"')[1]
            print line