关于 for 语句中的 grep "-i" 选项

about grep "-i" option in for statment

import os
f1 = open("/home/ace/Desktop/MB/shell_search/direct.txt",'r',encoding='UTF-8')
lines = f1.readlines()
lines = [line.strip() for line in lines]

for shell in lines:
 os.system("cat IIS_W3C_Log.log | grep -i \"" + shell + "\" > "+shell+".txt")

-i 选项不起作用...您的代码有问题吗? 区分大小写字母。

如果在“shell”中遇到特殊字符(符号),代码会抛出错误。即使出现符号,如何防止错误发生?

os.system() 开始 shell。如果您的 direct.txt 包含 $(rm -rf ~),那么 shell 将删除您的主目录。

不要那样做,尤其是当根本没有理由使用 shell 时。

更好的代码会在原生中进行字符串搜索 Python;但是如果我们想要出于某种原因继续使用grep,那可能看起来像:

import subprocess

f1 = open("/home/ace/Desktop/MB/shell_search/direct.txt", 'r', encoding='UTF-8')

for line in f1:
    shell = line.strip()
    shell_safe = shell.replace('/', '_').lstrip('.')
    if shell_safe == '':
        print("Skipping unsafe pattern: %q" % shell, file=sys.stderr)
        continue
    subprocess.call(
        ['grep', '-i', '-e', shell],
        stdin=open('IIS_W3C_Log.log', 'r'),
        stdout=open(f'{shell_safe}.txt', 'w')
    )