python linux bash grep cut

Gato, grep y corte-traducido a python



linux bash (5)

quizás haya suficientes preguntas y / o soluciones para esto, pero no puedo evitarlo con esta pregunta: Tengo el siguiente comando que estoy usando en un script de bash

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

Ahora, debido a algunos problemas, tengo que traducir todo el código a python. Nunca he usado python antes y no tengo la menor idea de cómo puedo hacer lo que hacen los comandos postet. ¿Alguna idea de cómo resolver eso con python?


En Python, sin dependencias externas, es algo como esto (no probado):

with open("filename") as origin: for line in origin: if not "something" in line: continue try: print line.split(''"'')[1] except IndexError: print


Necesita un bucle sobre las líneas de un archivo, necesita aprender acerca de los métodos de cadena

with open(filename,''r'') as f: for line in f.readlines(): # python can do regexes, but this is for s fixed string only if "something" in line: idx1 = line.find(''"'') idx2 = line.find(''"'', idx1+1) field = line[idx1+1:idx2-1] print(field)

y necesitas un método para pasar el nombre del archivo a tu programa python y, mientras lo haces, quizás también la cadena para buscar ...

Para el futuro, trate de hacer preguntas más enfocadas si puede,


Necesitas tener un mejor entendimiento del lenguaje python y su biblioteca estándar para traducir la expresión

cat "$ filename" : lee el archivo cat "$filename" y descarga el contenido a la salida estándar

| : pipe redirige el stdout del comando anterior y lo alimenta al stdin del siguiente comando

grep "algo" : busca en la expresión regular something archivo de datos de texto sin formato (si está especificado) o en la entrada estándar y devuelve las líneas correspondientes.

cut -d ''"'' -f2 : Divide la cadena con el delimitador específico e indexa / empalma campos particulares de la lista resultante

Equivalente Python

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)

Combinatorio

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


Para traducir el comando a python, consulte a continuación:

1) Alternativa de comando cat está abierta refiérase a esto . A continuación se muestra la muestra.

>>> f = open(''workfile'', ''r'') >>> print f

2) Alternativa de comando grep refiera this

3) Alternativa de comando Cortar refiera this


necesitas usar el módulo os.system para ejecutar el comando de shell

import os os.system(''command'')

Si desea guardar la salida para su uso posterior, debe utilizar el módulo de subprocess

import subprocess child = subprocess.Popen(''command'',stdout=subprocess.PIPE,shell=True) output = child.communicate()[0]