Grep и Python

Мне нужен способ искать файл с помощью grep через регулярное выражение из командной строки Unix. Например, когда я ввожу в командной строке:

python pythonfile.py 'RE' 'file-to-be-searched'

Мне нужно регулярное выражение 'RE' искаться в файле и распечатывать согласующие отрезки длинной линии.

Вот код, который я имею:

import re
import sys

search_term = sys.argv[1]
f = sys.argv[2]

for line in open(f, 'r'):
    if re.search(search_term, line):
        print line,
        if line == None:
            print 'no matches found'

Но когда я ввожу слово, которое не присутствует, no matches found не печатает

67
задан wjandrea 31 January 2017 в 01:23
поделиться

3 ответа

  1. используйте sys.argv для получения параметров командной строки
  2. используйте open () , read () для управления файлом
  3. используйте модуль Python re для сопоставления строк
4
ответ дан 24 November 2019 в 14:41
поделиться

Адаптировано из grep в python .

Принимает список имен файлов через ] [2:] , не обрабатывает исключения:

#!/usr/bin/env python
import re, sys, os

for f in filter(os.path.isfile, sys.argv[2:]):
    for line in open(f).readlines():
        if re.match(sys.argv[1], line):
            print line

sys.argv [1] resp sys.argv [2:] работает,

6
ответ дан 24 November 2019 в 14:41
поделиться

Естественный вопрос: почему бы просто не использовать grep ?! Но если предположить, что вы не можете ...

import re
import sys

file = open(sys.argv[2], "r")

for line in file:
     if re.search(sys.argv[1], line):
         print line,

На заметку:

  • search вместо match , чтобы найти любое место в строке
  • запятая (, ) после print удаляет возврат каретки (в строке будет один)
  • argv включает имя файла python, поэтому переменные должны начинаться с 1

Это не обрабатывает несколько аргументов (например, grep делает ) или раскрыть подстановочные знаки (как в оболочке Unix). Если вам нужна эта функция, вы можете получить ее, используя следующее:

import re
import sys
import glob

for arg in sys.argv[2:]:
    for file in glob.iglob(arg):
        for line in open(file, 'r'):
            if re.search(sys.argv[1], line):
                print line,
75
ответ дан 24 November 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: