Grep 和 Python

新手上路,请多包涵

我需要一种通过 Unix 命令行中的正则表达式使用 grep 搜索文件的方法。例如,当我在命令行中输入:

 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 不打印

原文由 David 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 230
1 个回答

自然的问题是为什么不直接使用 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 shell 那样)。如果你想要这个功能,你可以使用以下方法获得它:

 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,

原文由 Nick Fortescue 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题