Мне нужен способ искать файл с помощью 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
не печатает
sys.argv
для получения параметров командной строки open ()
, read ()
для управления файлом Адаптировано из 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:]
работает,
Естественный вопрос: почему бы просто не использовать 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,