findstr 是一个命令行工具,用于在文本文件中搜索字符串。它通常用于 Windows 系统的命令提示符或 PowerShell 中。findstr 主要用于以下几个功能:搜索文本: 可以在一个或多个文件中搜索包含特定字符串或正则表达式的行,并将符合条件的行打印出来。正则表达式支持: 支持使用正则表达式进行高级搜索,如匹配特定模式、字符类、重复项等。

findstr | Microsoft Learn

findstr 是一个命令行工具,用于在文本文件中搜索字符串。它通常用于 Windows 系统的命令提示符或 PowerShell 中。findstr 主要用于以下几个功能:

  1. 搜索文本: 可以在一个或多个文件中搜索包含特定字符串或正则表达式的行,并将符合条件的行打印出来。

  2. 正则表达式支持: 支持使用正则表达式进行高级搜索,如匹配特定模式、字符类、重复项等。

    正则表达式(Regular Expression,简称为Regex或RegExp)的起源可以追溯到20世纪50年代和60年代的计算机科学发展过程中。具体来说,正则表达式的概念和发展如下:

    1. 早期的字符串匹配算法:在计算机发展的早期阶段,字符串匹配是一个重要的问题,特别是在文本编辑和搜索的应用中。早期的算法包括暴力搜索和简单的模式匹配方法,但它们通常效率低下。

    2. 正则文法的引入:20世纪50年代末和60年代初,数学家斯蒂芬·科赫(Stephen Kleene)和美国数学家肯尼思·厄普(Kenneth E. Iverson)分别提出了正则文法(Regular Grammar)和正则集合(Regular Set)的概念。这些概念是在形式语言理论中用于描述正则语言的基础,后来成为正则表达式的理论基础。

    3. 正则表达式的实际应用:20世纪70年代,Unix操作系统的开发推动了正则表达式在实际应用中的普及。Unix中的一些工具如grep、sed等开始支持正则表达式,使得开发人员和系统管理员能够更有效地进行文本处理和模式匹配。

    4. 正则表达式的标准化和发展:随着计算机和软件技术的发展,正则表达式逐渐被用于各种编程语言和软件工具中。不同的编程语言(如Perl、Python、Java等)实现了自己的正则表达式引擎和语法,并且随着时间的推移,正则表达式的功能和语法得到了不断扩展和优化。

    正则表达式的发展是计算机科学理论与实践相结合的产物,它提供了一种强大的工具,用于处理和操作文本数据中的复杂模式。

    正则表达式的发展可以分为几个主要阶段,每个阶段都伴随着技术进步和应用需求的不断演变:

    1. 理论基础的奠定(20世纪50年代末 - 60年代初)

      • 正则表达式的理论基础源自形式语言理论的发展,特别是斯蒂芬·科赫(Stephen Kleene)和肯尼思·厄普(Kenneth E. Iverson)的工作。科赫提出了正则文法和正则集合的概念,这些成为了正则表达式的理论基础。
    2. Unix时代的应用推广(20世纪70年代)

      • Unix操作系统的出现推动了正则表达式在实际应用中的普及。Unix的一些工具如grep、sed等开始支持正则表达式,使得系统管理员和开发人员能够更有效地进行文本搜索、替换和处理。
    3. 编程语言中的整合(20世纪80年代 - 至今)

      • 随着计算机编程语言的发展,正则表达式被集成到各种编程语言和软件工具中。不同的编程语言如Perl、Python、Java等都实现了自己的正则表达式引擎和语法规则,逐步完善和扩展了正则表达式的功能和灵活性。
    4. 标准化和优化(近年来)

      • 近年来,正则表达式的标准化工作不断进行,以确保在不同平台和工具之间的兼容性和一致性。同时,正则表达式引擎的优化也在持续进行,以提升匹配效率和处理能力。
    5. 新技术和应用领域(未来发展方向)

      • 正则表达式在数据处理、文本分析、网络爬虫、自然语言处理等领域仍然发挥着重要作用。随着人工智能和大数据技术的发展,正则表达式在处理和分析大规模数据时的应用前景依然广阔。

    正则表达式经历了从理论研究到实际应用的演变过程,成为了计算机科学中重要的文本处理工具之一,其功能不断完善和扩展,应用范围也逐步扩展到多个领域。

    正则表达式在计算机科学和软件工程中有广泛的应用场景,主要用于处理和操作文本数据中的模式和结构。以下是一些常见的应用场景:

    1. 文本搜索与替换

      • 最基础的应用场景是在文本编辑器中进行搜索和替换操作。例如,查找特定格式的日期、邮箱地址、电话号码等,然后进行替换或者提取。
    2. 数据验证

      • 用于验证用户输入的数据格式是否符合预期的模式,例如验证邮箱、电话号码、身份证号码、URL等格式的合法性。
    3. 数据提取

      • 从结构化或半结构化的文本数据中提取特定信息。例如从HTML页面中提取所有链接,从日志文件中提取特定格式的事件或错误信息等。
    4. 数据清洗与转换

      • 在数据预处理中,用于清理不规则或者混乱格式的数据。例如去除空白字符、标准化日期格式、统一电话号码格式等。
    5. 语法分析与编译器

      • 在编译器和解析器中,正则表达式可以用于词法分析(lexical analysis)和语法分析(syntax analysis)。它们能够帮助编程语言的解析器理解和识别代码中的不同结构和关键字。
    6. 日志分析与处理

      • 在系统管理和监控中,正则表达式常用于分析和过滤日志信息。例如,从大量日志中提取特定事件或者异常情况,以便进一步分析和处理。
    7. 网页爬虫与文本抽取

      • 在网络数据抓取和处理中,正则表达式可以用来抽取网页中的关键信息,例如抓取新闻标题、文章内容、产品价格等。
    8. 自然语言处理(NLP)

      • 在文本分析和处理中,正则表达式有时用于基本的文本处理任务,例如分割句子、提取关键词等简单任务。
    9. 字符串处理和格式化

      • 在程序中处理字符串时,正则表达式可以用来匹配和处理特定格式的字符串,例如处理配置文件、日志文件等。

    总体而言,正则表达式是一种强大的工具,能够帮助开发人员和系统管理员在文本处理和模式识别方面节省大量时间和精力。它们的应用涵盖了从简单的文本搜索到复杂的数据处理和分析任务,是软件开发中不可或缺的一部分。

  3. 过滤输出: 可以根据搜索结果筛选文件或行,方便进一步处理或显示。

  4. 行号显示: 可以选择显示匹配行的行号,便于定位或其他处理。

下面是一些常见的用法示例:

  • 在文件中搜索包含特定字符串的行:

    Copy Code
    findstr "keyword" filename.txt
  • 使用正则表达式搜索:

    Copy Code
    findstr /r "^start" filename.txt
  • 显示匹配行及其行号:

    Copy Code
    findstr /n "pattern" filename.txt

findstr 的详细用法和选项可以通过在命令提示符或 PowerShell 中键入 findstr /? 来获取帮助信息。


findstr 命令在 Windows 中主要用于文本搜索和处理,其功能可以大致分类如下:

  1. 基本文本搜索

    • 搜索包含指定字符串的行。
    • 格式:findstr "string" filename
  2. 正则表达式搜索

    • 使用正则表达式进行更复杂的文本匹配。
    • 格式:findstr /r "pattern" filename
  3. 显示行号

    • 显示匹配行的行号。
    • 格式:findstr /n "string" filename
  4. 递归搜索

    • 在指定目录及其子目录中递归搜索。
    • 格式:findstr /s "string" directory_path
  5. 排除特定字符串

    • 只显示不包含指定字符串的行。
    • 格式:findstr /v "string" filename
  6. 多文件搜索

    • 在多个文件中搜索。
    • 格式:findstr "string" file1.txt file2.txt
  7. 忽略大小写

    • 忽略搜索时的大小写区别。
    • 格式:findstr /i "string" filename
  8. 显示匹配字符串

    • 仅显示与指定字符串匹配的部分。
    • 格式:findstr /c:"string" filename
  9. 输出到文件

    • 将搜索结果输出到文件而不是屏幕。
    • 格式:findstr "string" filename > output.txt

这些功能使得 findstr 成为一个强大的命令行工具,适用于从简单的文本查找到复杂的正则表达式搜索和批处理操作。


findstr 命令在 Windows 系统中是一个命令行工具,用于在文本文件中进行搜索操作。它的底层原理涉及几个主要的技术和步骤:

  1. 文件遍历

    • findstr 首先需要获取指定文件(或多个文件)的内容。它会按照给定的路径或通配符(如 *.txt)来遍历文件系统中的文件。
  2. 文本扫描

    • 对于每个文件,findstr 将逐行读取文本内容。它会逐行扫描每个文件,并在每行中查找匹配的字符串或正则表达式模式。
  3. 匹配算法

    • findstr 使用一种高效的算法来检查每行是否包含指定的搜索字符串或正则表达式。这可能涉及到基本的字符串匹配,也可能包括正则表达式引擎的调用,具体取决于用户输入的搜索模式。
  4. 结果输出

    • 当找到匹配项时,findstr 将匹配的行输出到标准输出(通常是命令行窗口)。用户可以选择将输出重定向到文件,以便后续处理或保存搜索结果。
  5. 选项和参数处理

    • findstr 支持多种选项和参数,如搜索模式、正则表达式、行号显示等。它会根据用户输入来调整其内部处理逻辑,以满足不同的搜索需求。
  6. 性能优化

    • 为了提高搜索效率,findstr 可能会使用一些优化策略,如缓存文件内容、并行处理多个文件等。这些优化有助于加快大型文件或多文件搜索的速度。

 findstr 的底层原理是通过文件遍历和逐行文本扫描,结合有效的匹配算法,来实现用户指定的文本搜索和过滤功能。


findstr 是一个内置于 Windows 操作系统的命令行工具,它并没有单独的架构概念或者外部可见的模块化结构,而是作为一个整体命令行工具实现了特定的功能。然而,我们可以从功能和实现角度来理解它的工作方式。

  1. 命令行接口

    • findstr 提供了命令行接口,用户可以通过命令行窗口调用它,并通过一系列选项和参数来指定搜索的内容、文件、匹配规则等。
  2. 文本处理

    • findstr 主要进行文本处理和搜索。它会按行读取文本文件,对每一行应用用户指定的搜索规则,并输出符合条件的行。
  3. 搜索算法

    • findstr 使用了一种高效的搜索算法,可以处理基本的字符串匹配,也支持正则表达式,这使得它可以满足更复杂的搜索需求。
  4. 文件系统交互

    • findstr 与文件系统交互,根据用户指定的路径或文件名模式,遍历文件系统中的文件,并对每个文件执行搜索操作。
  5. 输出和结果处理

    • 搜索结果通常会直接输出到命令行窗口,用户可以通过重定向操作将结果保存到文件中。这种输出和结果处理方式是命令行工具常见的做法。
  6. 性能和优化

    • 为了提高搜索效率,findstr 可能会使用一些性能优化策略,如缓存文件内容、并行处理多个文件等,尤其是在处理大型文件或大量文件时。

虽然没有明确的架构描述,但可以认为 findstr 在内部实现上会包括文件操作、文本处理、匹配算法以及命令行参数解析等功能模块。这些模块协同工作,使得 findstr 能够有效地进行文本搜索和处理任务。


findstr 在 Windows 系统中是一个非常实用的命令行工具,主要用于文本搜索和过滤。它的应用场景包括但不限于以下几个方面:

  1. 搜索文件内容

    • 最常见的用途是在文本文件中搜索特定的字符串或者匹配的正则表达式模式。例如,可以使用 findstr "keyword" filename.txt 来查找文件 filename.txt 中包含指定关键字的所有行。
  2. 批处理和脚本

    • findstr 在批处理脚本或者命令行脚本中非常有用,可以用来筛选和处理文件中的数据。通过结合其他命令和操作,可以实现复杂的数据处理流程。
  3. 日志分析

    • 在处理日志文件时,findstr 可以帮助找出特定时间段、错误消息或其他关键信息。这对于系统管理员和开发人员来说尤为重要,可以快速定位和解决问题。
  4. 文本文件过滤

    • 可以使用 findstr 来过滤文件内容,例如只保留或排除包含特定字符串的行。这在数据清洗和预处理时特别有用。
  5. 正则表达式应用

    • 支持正则表达式的功能使得 findstr 可以进行更灵活和复杂的文本匹配,如查找多种格式的数据、特定模式的文本等。
  6. 递归搜索

    • 通过 findstr /s 参数,可以递归搜索指定目录及其子目录中的文件内容,这对于需要查找整个项目或文件夹结构中的特定信息非常有帮助。
  7. Windows 脚本中的使用

    • 在编写 Windows 脚本或批处理文件时,findstr 可以作为基础工具来进行文本处理和条件判断,与其他命令配合使用,完成各种自动化任务。

 findstr 是 Windows 系统中一个功能强大且多用途的命令行工具,适用于各种需要文本搜索和处理的场景,从简单的文件查找到复杂的数据分析都有广泛的应用。


当使用 findstr 命令进行基本的文本搜索时,可以通过一些简单的实例来演示其用法。以下是一些初级实例:

示例一:在单个文件中搜索关键字

假设有一个文本文件 example.txt,内容如下:

Copy Code
This is a text file.
It contains some example lines.
We will search for specific keywords.
Let's see how findstr works.

现在我们想搜索文件中包含单词 "example" 的行。

命令:

Copy Code
findstr "example" example.txt

输出:

Copy Code
It contains some example lines.

这将输出包含 "example" 的行。

示例二:搜索多个文件中的关键字

假设有两个文本文件 file1.txtfile2.txt,内容如下:

file1.txt

Copy Code
This is file 1.
It has some text in it.
We will search this file for a keyword.

file2.txt

Copy Code
This is file 2.
It also has some text.
We will search this file too.

现在我们想在这两个文件中搜索包含单词 "file" 的行。

命令:

Copy Code
findstr "file" file*.txt

输出:

Copy Code
file1.txt:This is file 1.
file2.txt:This is file 2.

这将输出在 file1.txtfile2.txt 中包含 "file" 的行,并显示文件名及匹配的具体内容。

示例三:使用正则表达式搜索

假设我们希望搜索包含以数字开头的行。

命令:

Copy Code
findstr "^[0-9]" example.txt

输出:

Copy Code

这将输出以数字开头的行,因为示例文本中没有以数字开头的行,所以这里输出为空。

示例四:递归搜索文件夹中的内容

假设我们有一个文件夹 folder,里面包含多个文本文件。我们希望递归搜索所有文件,找出包含特定单词 "search" 的行。

命令:

Copy Code
findstr /s "search" folder\*.txt

这将递归搜索 folder 文件夹及其子文件夹中的所有 .txt 文件,输出包含 "search" 的行及其所在文件的路径信息。

这些实例展示了 findstr 命令在不同场景下的基本用法。根据具体需求,可以结合不同的选项和参数,进行更复杂和精确的文本搜索操作。

示例五:搜索特定文件类型中的内容

假设我们希望只搜索某个文件夹中的所有 .log 文件,并找出包含 "error" 的行。

假设我们有一个文件夹 logs,里面包含多个 .log 文件。

命令:

Copy Code
findstr "error" logs\*.log

这将搜索 logs 文件夹中所有的 .log 文件,输出包含 "error" 的行及其所在文件名。

示例六:将输出导入到文件

假设我们希望将搜索结果保存到一个文件中,而不是直接在命令行中显示。

命令:

Copy Code
findstr "example" example.txt > results.txt

这将把包含 "example" 的行输出到 results.txt 文件中,而不会在命令行显示输出。

示例七:搜索不包含特定字符串的行

假设我们希望查找一个文件中不包含特定字符串 "ignore" 的行。

命令:

Copy Code
findstr /v "ignore" example.txt

这将输出 example.txt 中不包含 "ignore" 的所有行。

示例八:结合正则表达式和递归搜索

假设我们希望递归搜索一个文件夹及其子文件夹中的所有 .txt 文件,并找出包含数字的行。

命令:

Copy Code
findstr /s /r "[0-9]" folder\*.txt

这将递归搜索 folder 文件夹及其子文件夹中的所有 .txt 文件,输出包含数字的行。

示例九:搜索多个关键字

假设我们希望搜索一个文件中同时包含 "keyword1" 和 "keyword2" 的行。

命令:

Copy Code
findstr "keyword1" example.txt | findstr "keyword2"

这将在 example.txt 中搜索同时包含 "keyword1" 和 "keyword2" 的行。

这些示例展示了 findstr 命令的一些高级用法,可以根据具体的需求和情境进行调整和扩展。通过灵活使用 findstr,可以实现各种文本搜索和处理任务。

当使用 findstr 命令时,中级实例可以涉及更复杂的搜索需求,例如结合正则表达式、搜索特定文件类型等。以下是一些中级实例:

示例一:使用正则表达式进行复杂搜索

假设我们有一个包含多个文本文件的文件夹 documents,我们希望在所有文件中搜索包含日期格式(如 YYYY-MM-DD)的行。

命令:

Copy Code
findstr /r "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" documents\*.txt

这将搜索 documents 文件夹中所有 .txt 文件,找出包含形如 YYYY-MM-DD 格式的日期的行。

示例二:递归搜索特定文件类型的内容

假设我们希望递归搜索一个文件夹及其所有子文件夹中的所有 .csv 文件,并找出包含 "error" 的行。

命令:

Copy Code
findstr /s "error" folder\*.csv

这将递归搜索 folder 文件夹及其子文件夹中所有 .csv 文件,输出包含 "error" 的行。

示例三:搜索包含多个关键字的行

假设我们希望在一个文件中同时搜索包含 "keyword1" 和 "keyword2" 的行。

命令:

Copy Code
findstr "keyword1" example.txt | findstr "keyword2"

这将在 example.txt 文件中搜索同时包含 "keyword1" 和 "keyword2" 的行。

示例四:搜索不包含特定字符串的行

假设我们需要在一个文件中找出不包含 "ignore" 字符串的所有行。

命令:

Copy Code
findstr /v "ignore" example.txt

这将输出 example.txt 中不包含 "ignore" 的所有行。

示例五:将搜索结果导出到文件

假设我们希望将搜索结果保存到一个文件中,而不是在命令行中显示。

命令:

Copy Code
findstr "example" example.txt > results.txt

这将把包含 "example" 的行输出到 results.txt 文件中。

这些示例展示了如何使用 findstr 命令进行一些复杂的文本搜索操作。你可以根据具体的需求和情境调整这些命令来满足你的需要。

一些高级示例,涉及更复杂的 findstr 命令用法,包括结合多个参数、使用正则表达式、处理特定文本文件格式等。

示例一:结合多个参数进行搜索

假设我们有一个日志文件夹 logs,我们希望在这些日志文件中搜索同时包含 "error" 和 "2023-07-04" 的行。

命令:

Copy Code
findstr "error" logs\*.log | findstr "2023-07-04"

这将首先在 logs 文件夹中所有 .log 文件中搜索包含 "error" 的行,然后再从结果中筛选出同时包含 "2023-07-04" 的行。

示例二:使用正则表达式进行更精确的匹配

假设我们希望在一个文本文件 data.txt 中,找出以字母开头并且长度为4的单词。

命令:

Copy Code
findstr "\<[a-zA-Z]\{4\}\>" data.txt

这将搜索 data.txt 中所有符合以字母开头且长度为4的单词。

示例三:在搜索结果中显示匹配行的行号

假设我们需要在一个大型文件中查找匹配行,并显示这些行的行号。

命令:

Copy Code
findstr /n "keyword" largefile.txt

这将在 largefile.txt 中搜索包含 "keyword" 的行,并显示每行的行号。

示例四:递归搜索特定文件夹中的特定内容

假设我们希望在一个文件夹及其所有子文件夹中搜索包含 "important" 的行,并且只搜索 .txt 文件。

命令:

Copy Code
findstr /s /i "important" folder\*.txt

这将递归地搜索 folder 文件夹及其所有子文件夹中所有 .txt 文件,忽略大小写地找出包含 "important" 的行。

示例五:搜索特定文件编码格式的文件内容

假设我们有一个 UTF-16 编码的文本文件 data_utf16.txt,我们希望在其中搜索包含 "pattern" 的行。

命令:

Copy Code
findstr /p /c:"pattern" /m /s /i data_utf16.txt

这将在 UTF-16 编码的 data_utf16.txt 文件中搜索包含 "pattern" 的行,显示匹配行的文件路径和行号。

这些高级示例展示了 findstr 命令如何应对复杂的搜索需求,包括多条件组合、正则表达式、文件格式处理等。根据具体的情况,你可以进一步调整这些命令以满足特定的搜索和筛选需求。


一些更复杂和专业的 findstr 命令示例,展示其强大的搜索和过滤功能:

示例一:使用正则表达式进行多条件匹配

假设我们需要在一个文本文件中找出同时包含 "error" 或 "warning" 的行,且行中出现的数字必须是 3 位数。

命令:

Copy Code
findstr /R "\<error\>" /R "\<warning\>" /R "\<[0-9][0-9][0-9]\>" filename.txt

这将在 filename.txt 中搜索包含 "error" 或 "warning",且同时包含一个三位数的行。

示例二:搜索特定编码格式的文件内容

假设我们需要在一个 UTF-8 编码的文本文件夹及其子文件夹中,找出包含 "important" 的行,并显示匹配行的文件路径。

命令:

Copy Code
findstr /S /I /C:"important" /P /M /T:UTF-8 "folder\*.txt"

这将递归地搜索 folder 文件夹及其所有子文件夹中所有 UTF-8 编码的 .txt 文件,忽略大小写地找出包含 "important" 的行,并显示文件路径。

示例三:处理特定格式的日志文件

假设我们有一个 Apache 访问日志文件,我们希望找出所有 HTTP 状态码为 404 或 500 的行,并显示其所在的文件和行号。

命令:

Copy Code
findstr /C:" 404 " /C:" 500 " /S /I /N /M "access.log"

这将在 access.log 中搜索包含 " 404 " 或 " 500 " 的行(注意空格是为了确保匹配状态码),并显示匹配行的文件路径和行号。

示例四:搜索特定日期范围内的日志

假设我们需要在一个日志文件夹中,找出在 2023 年 7 月 1 日至 2023 年 7 月 31 日之间的所有日志行。

命令:

Copy Code
findstr /C:"2023-07-0[1-9]" /C:"2023-07-1[0-9]" /C:"2023-07-2[0-9]" /C:"2023-07-3[0-1]" /S /I /M "logs\*.log"

这将在 logs 文件夹中所有 .log 文件中搜索包含 2023 年 7 月份日期的行,并显示文件路径。

这些示例展示了如何结合 findstr 的不同选项和参数,以处理更为复杂和具体的搜索需求,从而帮助你在实际工作中更有效地利用这个命令工具。


顶尖级的 findstr 命令示例通常涉及更复杂的搜索需求和处理大量数据的情况。以下是几个高级示例:

示例一:使用正则表达式和输出定制

假设我们需要在一个目录中找出包含任意单词 "error" 或 "warning" 的行,同时显示匹配的行数和文件路径。

命令:

Copy Code
findstr /R "\<error\>" /R "\<warning\>" /S /N /C:"error" /C:"warning" /O /M

这个命令结合了正则表达式和常规字符串搜索,同时使用 /N 显示行号,/O 按原始顺序输出,并使用 /M 显示文件名。

示例二:处理大型日志文件并导出结果

假设我们需要在一个大型日志文件中,找出包含关键字 "exception" 的行,并将结果导出到一个新的文本文件中。

命令:

Copy Code
findstr /C:"exception" /S /I /N /M "large_logfile.log" > exceptions.txt

这将在 large_logfile.log 中搜索包含 "exception" 的行,忽略大小写 (/I),显示行号 (/N),并将结果输出到 exceptions.txt 文件中。

示例三:使用多个文件和递归搜索

假设我们需要在一个包含多个子文件夹的文件结构中,找出所有包含 "TODO" 或 "FIXME" 的行,并显示其所在文件路径和行号。

命令:

Copy Code
findstr /S /C:"TODO" /C:"FIXME" /N /M "C:\projects\*.java"

这将递归搜索 C:\projects 目录及其所有子文件夹中的所有 .java 文件,找出包含 "TODO" 或 "FIXME" 的行,并显示文件路径和行号。

示例四:结合 PowerShell 和 findstr

假设我们需要在 PowerShell 脚本中使用 findstr 进行特定模式的输出处理,比如仅显示匹配的行内容。

PowerShell 脚本:

powershellCopy Code
$output = & findstr /C:"pattern" /S /N /M *.txt
foreach ($line in $output) {
    Write-Output $line
}

这个示例演示了如何在 PowerShell 脚本中调用 findstr 并处理其输出,以实现更高级的控制和定制。

这些顶尖级的示例展示了 findstr 命令如何在复杂和高级的场景中发挥作用,结合不同的选项和参数,处理各种搜索和过滤需求。


 

posted @ 2024-07-04 03:20  suv789  阅读(19)  评论(0编辑  收藏  举报