用二维图像渲染3D场景视频
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。
我是Srlua小谢,在这里我会分享我的知识和经验。🎥
希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮
记得先点赞👍后阅读哦~ 👏👏
📘📚 所属专栏:传知代码论文复现
欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙
目录
概述
原理介绍
传统NeRF的原理
mip-NeRF的改进
模型介绍
复现过程
安装环境
准备数据
训练(train)
评估(eval)
渲染(render)
参考资料
本文所有资源均可在该地址处获取。
概述
NeRF(Neural Radiance Fields)是一种神经辐射场,用于将图像转换为3D场景表示。然而,在不同分辨率的训练或测试图像观察场景内容时,NeRF的渲染过程可能会产生过度模糊或伪影的图像。对于传统NeRF来说,使用多条光线对每个像素进行超采样的渲染方案是不实际的,因为渲染每条光线需要对MLP进行数百次查询。
本文提出的mip-NeRF模型,将NeRF扩展到连续值尺度上。通过向像素点投射一个锥形区域(而非光线)进行采样,mip-NeRF减少了伪影的产生,显著提高了NeRF对细节的表示能力,同时比NeRF快7%,仅为NeRF的一半大小。与NeRF相比,mip-NeRF在NeRF呈现的数据集上的平均误差率降低了17%,在多尺度变体数据集上降低了60%。此外,mip-NeRF还拥有与超采样NeRF相当的准确性,而速度快22倍。
原理介绍
传统NeRF的原理
NeRF使用一个连续的5D函数来表示场景,并使用少量的输入视图来优化这个函数以生成复杂场景的新视角。NeRF使用基于MLP的全连接神经网络来表示场景,输入为一个连续的5D坐标,包括空间位置(x,y,z)和观察视角(θ, φ),输出为该空间位置的体密度σ和与视角相关的RGB颜色。通过沿着相机射线查询MLP并使用经典的体渲染技术将输出颜色和密度投影到图像中来生成新视图。
mip-NeRF的改进
- 使用圆锥追踪代替光线追踪,从而显著改善了抗锯齿(伪影)效果。
- 使用集成位置编码(IPE)特征代替传统的位置编码(PE)特征,实现了更高效的采样和尺度编码。
- 通过单一的多尺度模型(而不是NeRF中的每个尺度单独的模型),使得mip-NeRF的准确性、效率和简单性都得到了提高。
模型介绍
Mip-NeRF是一种用于解决神经辐射场(NeRF)中降采样和抗锯齿问题的改进模型,模型的处理过程如下:
- 对于场景中的每个像素,从相机的中心沿着像素中心的方向投射一个圆锥。
- 计算每个采样间隔的集成位置编码(IPE)特征,作为多层感知机(MLP)的输入。
- MLP输出密度和颜色,用于渲染场景。
复现过程
笔者使用的硬件和系统环境如下:
- 显卡使用RTX4090 24G(实际使用15.25G左右)
- CPU:I9-10900X
- 主存:46.8G
- linux系统(ubuntu20.04.1-desktop)
*以上环境非最低要求,但尽量保证显卡显存16G以上,尽量使用linux桌面版系统
读者还需确保环境已正确安装nvidia显卡驱动(使用nvidia-smi
命令能正常输出显卡信息)
我们基于pytorch框架的代码实现进行复现,有利于学习和环境搭建。
安装环境
-
克隆项目源码
# 使用git克隆源码(笔者发现该源码由于作者更新过以后出现了些bug, # 笔者已经fork到自己的仓库,并修复了bug,推荐大家直接clone笔者的仓库) # git clone https://github.com/hjxwhy/mipnerf_pl.git #原作者仓库 git clone https://github.com/Ryan2ky/mipnerf_pl.git # 进入项目目录 cd mipnerf_pl
用conda创建虚拟环境
-
# 创建虚拟环境(推荐python版本为3.9.12) conda create --name mipnerf python=3.9.12 # 激活环境 conda activate mipnerf # 安装最新版的pip工具 conda install pip pip install --upgrade pip # 使用pip安装依赖库 pip install -r requirements.txt
注意:如果读者使用的linux环境不支持桌面GUI,请将
requirements.txt
中的opencv-python==4.5.4.58
依赖改为无头版本的opencv-python-headless==4.5.4.58
-
安装pytorch依赖
可以前往地址根据自己的操作系统环境选择合适的pytorch版本:
注意:pytorch的cuda工具包版本应根据显卡所支持的cuda版本选择(可使用
nvidia-smi
命令查看)(一般应满足:[pytorch+cuda]版本 <= [Cuda]版本)
执行安装命令:
pip3 install torch torchvision torchaudio
准备数据
-
在项目根目录中创建一个
data
目录用来存放训练数据 -
我们使用谷歌官方的NeRF数据集(下载链接见附件
README.md
中的Dataset小节)进行实验,将nerf_synthetic.zip
下载并解压到data
目录下 -
将
nerf_synthetic
数据集转换成多尺寸mipmap数据集python datasets/convert_blender_data.py --blender_dir ./data/nerf_synthetic --out_dir ./data/multiscale
至此,我们拥有了2个数据集,结构如下:
- data
- nerf_synthetic(单一尺寸Blender数据集)
- multiscale(多尺寸Blender数据集)
训练(train)
我们以lego这一数据集为例,进行单尺寸和多尺寸的训练:
-
配置
我们可以在
configs
文件夹下配置训练的参数,默认使用的是configs/default.yaml
,其中已经配置好了lego场景的参数,我们可以复制一份到lego-multiscale.yaml
,并修改exp_name
为lego_multiscale
加以区分。读者还可以根据需求配置一些其他的参数,例如:check_interval
:验证并保存模型的频率,该参数表示每经过一定步数,即进行一次验证,并保存模型到ckpt文件夹下。resume_path
:从ckpt恢复模型以继续训练,首次训练时应当设为None
表示无需从ckpt恢复。
-
训练
# 训练单一尺寸数据集 python train.py --out_dir ./out --data_path ./data/nerf_synthetic/lego --dataset_name blender # 训练多尺寸数据集 python train.py --out_dir ./out --data_path ./data/multiscale/lego --dataset_name multi_blender --config ./config/lego-multiscale.yaml
-
中断与恢复
默认配置下,训练会不断进行(不超过
max_steps
),当认为差不多时,可以手动ctrl+c
终止训练。训练模型保存在./out/{exp_name}/ckpt
中。如果因为异常导致终止,我们也可以从之前保存的ckpt中恢复,只需在配置文件中指定
resume_path
为具体的ckpt文件即可。
评估(eval)
#单尺寸模型评估
python eval.py --ckpt ./out/lego/ckpt/last.ckpt --data ./data/nerf_synthetic/lego --out_dir ./out --scale 1 --save_image
#多尺寸模型评估
python eval.py --ckpt ./out/lego_multiscale/ckpt/last.ckpt --data ./data/multiscale/lego --out_dir ./out --scale 4 --save_image
评估结果存放在./out/{exp_name}/test
下。
渲染(render)
# 单尺寸模型渲染
python render_video.py --ckpt ./out/lego/ckpt/last.ckpt --out_dir ./out --scale 1
# 多尺寸模型渲染
python render_video.py --ckpt ./out/lego_multiscale/ckpt/last.ckpt --out_dir ./out --scale 4
渲染结果保存在./out/{exp_name}/render_spheric
下。
参考资料
论文地址:https://arxiv.org/abs/2103.13415
相关文章:
用二维图像渲染3D场景视频
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
ChatGPT 最新推出的 Pro 订阅计划,具备哪些能力 ?
OpenAI 最近推出了 ChatGPT Pro,这是一个每月收费 200 美元的高级订阅计划,旨在为用户提供对 OpenAI 最先进模型和功能的高级访问。 以下是 ChatGPT Pro 的主要功能和能力: 高级模型访问: o1 模型:包括 o1 和 o1 Pro…...
如何在 IntelliJ IDEA 中为 Spring Boot 应用实现热部署
文章目录 1. 引言2. 准备工作3. 添加必要的依赖4. 配置 IntelliJ IDEA4.1 启用自动编译4.2 开启热部署策略 5. 测试热部署6. 高级技巧7. 注意事项8. 总结 随着现代开发工具的进步,开发者们越来越重视提高生产力的特性。对于 Java 开发者来说,能够在不重启…...
NLP与LLM的工程化实践与学习思考 - 写在开头
NLP与LLM的工程化实践与学习思考[24年半年工作总结] - 写在开头 0 开头的开头 0 开头的开头 24年因为一些工作原因,短暂在NLP领域遨游了半年。这半年对我的影响蛮大,一来是因为此前从没接触过这个方向学到新东西挺开心的,二来是在工程化实践…...
Redis(一)
Redis 基础 什么是 Redis? Redis (REmote DIctionary Server)是一个基于 C 语言开发的开源 NoSQL 数据库(BSD 许可)。与传统数据库不同的是,Redis 的数据是保存在内存中的(内存数据库…...
RocketMq源码-broker(五)
一、RocketMq存储设计 RocketMQ 主要存储的文件包括Commitlog 文件、ConsumeQueue 文件、IndexFile。RocketMQ 将所有主题的消息存储在同一文件,确保消息发送时顺序写文件,尽最大的能力确保消息发送的高性能与高吞吐量。 但由于一般的消息中间件是基于消…...
【Linux】文件描述符fd
1.前置预备 文件 内容 属性访问文件之前,都必须先打开他 #include<stdio.h> int main() { FILE* fpfopen("log.txt","w"); if(fpNULL) { perror("fopen"); return 1; } fclose(fp); return 0…...
mysql之事务
MySQL的事务隔离特性指的是多个并发事务之间相互隔离的程度,以保证数据的一致性和并发性。MySQL支持四个隔离级别,分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repe…...
python插入mysql数据
# 插入与上一篇变化不大,只是需要进行确认操作. 增加确认操作的方法有两种(假设类对象为a): 1.在连接时传入一个参数:autocommitTrue aConnection( host"localhost", port3306, user"root", password"自己的密码…...
C语言面试题/笔试题/高频面试题
一、C: 1.static和const的作用优缺点 限制作用域: static声明中使用全局变量、函数 ,仅当前文件内可用,其他文件不能引用 static修饰的局部变量只能在本函数中使用. 延长生命周期: static修饰的变量生命周期为整个程序 存放位置&a…...
rust websocket Echo server高性能服务器开发
最近在学习websocket时,一直没有发现好的websocket server工具来调试,于是就自己做了一个websocket server用来学习和调试。因为rust性能遥遥领先,所以就采用了rust来搭建服务器。废话不多说直接上代码main.rs: use tokio::net::TcpListener; use tokio_tungstenite::tung…...
Docker打包SpringBoot项目
一、项目打成jar包 在进行docker打包之前,先确定一下,项目能够正常的打成JAR包,并且启动之后能够正常的访问。这一步看似是可有可无,但是能避免后期的一些无厘头问题。 二、Dockerfile 项目打包成功之后,需要编写Doc…...
ViT学习笔记(二) Patch+Position Embedding阶段的详细推演与理解
我认为讲得最好的一个文章:Vision Transformer详解-CSDN博客 有很多文章,自己并没有完全正确理解。 我的笔记,以ViT的标准应用为例: • 输入图像:输入图像的尺寸是224x224,且是RGB图像,因此输…...
Elasticsearch 单节点安全配置与用户认证
Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞:Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时,需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤,为单节…...
【PHP项目实战】活动报名系统
目录 项目介绍 开发语言 后端 前端 项目截图(部分) 首页 列表 详情 个人中心 后台管理 项目演示 项目介绍 本项目是一款基于手机浏览器的活动报名系统。它提供了一个方便快捷的活动报名解决方案,无需下载和安装任何APP,…...
ASP.NET Core8.0学习笔记(二十五)——EF Core Include导航数据加载之预加载与过滤
一、导航属性数据加载 1.在EF Core中可以使用导航属性来加载相关实体。 2.加载实体的三种方式: (1)预先加载:直接在查询主体时就把对应的依赖实体查出来(作为初始查询的一部分) (2)显式加载:使用代码指示稍后显式的从…...
【RK3562J开发笔记】MCP2518FD外部CAN-FD控制器的调试方法
“SPI转CAN-FD”是嵌入式开发领域的常用方法,它极大地促进了不同通信接口之间的无缝连接,并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动,从而原生支持这一功能。该开发板…...
docker安装Emqx并使用自签名证书开启 SSL/TLS 连接
docker安装Emqx并使用自签名证书开启 SSL/TLS 连接 一、获取自签名证书1、创建openssl.cnf文件2、生成证书自签名证书 二、docker安装EMQX1、初始化目录2、加载镜像文件并挂载相应的文件目录3、启动docker容器4、EMQX加载自签名证书 三、客户端MQTTX连接测试四、Springboot整合…...
AI驱动的低代码平台:解密背后的算法与架构创新
引言 在如今的数字化浪潮中,企业对软件的需求正以前所未有的速度增长。传统的开发方式由于开发周期长、成本高,已逐渐无法满足市场的快速变化。而低代码平台的出现,使得开发者和业务人员能够以极简的方式快速构建应用。然而,随着企…...
ruoyi的excel批量导入
最简单方式 若依的官方文档提供了教程,可以按照起前后端的教学,进行代码编写 前段 组件 <!-- 导入对话框 --><el-dialogtitle"导入数据"v-model"openImport"width"500px"append-to-body><el-uploadref&quo…...
大数据-244 离线数仓 - 电商核心交易 ODS层 数据库结构 数据加载 DataX
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
Spring Security
一.权限控制 1.1 认证和授权概念 问题1:在生产环境下我们如果不登录后台系统就可以完成这 些功能操作吗? 答案显然是否定的,要操作这些功能必须首先登录到系统才可 以。 问题2:是不是所有用户,只要登录成功就都可以操…...
OpenAI 正式发布 o1 完整版
OpenAI 在 o1 模型完整版,该模型相较于之前的 o1-preview 版本在智能能力上有所提升,特别是在编程能力方面,并且能够根据问题的难度智能调节响应速度。此外还新增了图像识别功能,但目前仍然不支持网页浏览、文件上传等功能 o1 模…...
Ubuntu22.04搭建LAMP环境(linux服务器学习笔记)
目录 引言: 一、系统更新 二、安装搭建Apache2 1.你可以通过以下命令安装它: 2.查看Apache2版本 3.查看Apache2运行状态 4.浏览器访问 三、安装搭建MySQL 1.安装MySQL 2.查看MySQL 版本 3.安全配置MySQL 3.1是否设置密码?(按y|Y表…...
C#与PLC通讯时,数据读取和写入浮点数,字节转换问题(ModbusTCP)
在与PLC进行通讯时,会发现一个问题,浮点数1.2接收过来后,居然变成了两个16位的整数。 经过一系列的分析,这是因为在PLC存储浮点数时32位,我们接收过来的数据会变成两个16位的高低字节,而且我们进行下发数据…...
synchronized的特性
1.互斥 对于synchronized修饰的方法及代码块不同线程想同时进行访问就会互斥。 就比如synchronized修饰代码块时,一个线程进入该代码块就会进行“加锁”。 退出代码块时会进行“解锁”。 当其他线程想要访问被加锁的代码块时,就会阻塞等待。 阻塞等待…...
NLP与LLM的工程化实践与学习思考 - 说说知识图谱
NLP与LLM的工程化实践与学习思考[24年半年工作总结] - 说说知识图谱 0 真的就是先说说1 为什么知识图谱什么是知识图谱?基于图的数据结构?基于数据结构的图?知识图谱的技术要点两个技术维度:知识、图七个技术要点:表示…...
php 系统函数 记录
PHP intval() 函数 PHP函数介绍—array_key_exists(): 检查数组中是否存在特定键名 如何使用PHP中的parse_url函数解析URL PHP is_array()函数详解,PHP判断是否为数组 PHP函数介绍:in_array()函数 strpos定义和用法 strpos() 函数查找字符串在另一字符串…...
游戏引擎学习第38天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾上次的内容。 我们之前讨论了将精灵放在屏幕上,但颜色错误的问题。问题最终查明是因为使用了一个调整工具,导致文件的字节顺序发生了变化。重新运行“image magic”工具对一些大图像进行重新处理后&am…...
Android 15 行为变更:所有应用
Android 15 平台包含一些可能会影响您的应用的行为变更。以下行为变更将影响在 Android 15 上运行的所有应用,无论采用哪种 targetSdkVersion 都不例外。您应该测试您的应用,然后根据需要进行修改,以适当地支持这些变更。 此外,请…...
基于pytorch的深度学习基础4——损失函数和优化器
四.损失函数和优化器 4.1 均值初始化 为减轻梯度消失和梯度爆炸,选择合适的权重初值。 十种初始化方法 Initialization Methods 1. Xavie r均匀分布 2. Xavie r正态分布 4. Kaiming正态分布 5. 均匀分布 6. 正态分布 7. 常数分布 8. 正交矩阵初…...
《Clustering Propagation for Universal Medical Image Segmentation》CVPR2024
摘要 这篇论文介绍了S2VNet,这是一个用于医学图像分割的通用框架,它通过切片到体积的传播(Slice-to-Volume propagation)来统一自动(AMIS)和交互式(IMIS)医学图像分割任务。S2VNet利…...
Webpack Source Map 配置详解与优化策略
前言 Source Map 是前端开发和调试中的核心工具之一,它可以显著提高我们在代码调试和错误追踪方面的效率。随着 JavaScript 应用越来越复杂,代码打包和优化成为必然,而这一过程会使得调试变得异常困难。Source Map 的出现,为我们…...
el-tree组件刷新指定id的节点数据
示例 封装一个可以刷新多个指定id的节点数据。 <template><el-tree ref"treeRef"></el-tree> </template><script lang"ts" setup> const treeRef ref()function refreshTreeById(nodeIds: number[]) {nodeIds.forEach((…...
深入 Java 基础 XML:高级特性与最佳实践
在上一篇文章中,我们对 Java 基础 XML 有了一个初步的认识,了解了 XML 的基本结构以及在 Java 中常见的解析方式。今天,我们将进一步深入探讨 Java 与 XML 的结合,包括一些高级特性和最佳实践。 一、XML 命名空间 在复杂的 XML …...
aws(学习笔记第十六课) 使用负载均衡器(ELB)解耦webserver以及输出ELB的日志到S3
aws(学习笔记第十六课) 使用负载均衡器(ELB)以及输出ELB的日志到S3 学习内容: 使用负载均衡器(ELB)解耦web server输出ELB的日志到S3 1. 使用负载均衡器(ELB) 全体架构 使用ELB(Elastic Load Balancer)能够解耦外部internet访问和web server之间的耦合,…...
Ubuntu与Centos系统有何区别?
Ubuntu和CentOS都是基于Linux内核的操作系统,但它们在设计理念、使用场景和技术实现上有显著的区别。以下是详细的对比: 1. 基础和发行版本 Ubuntu: 基于Debian,使用.deb包管理系统。包含两个主要版本: LTSÿ…...
【OpenDRIVE_Python】使用python脚本读取txt指定内容,输出OpenDRIVE数据中对应的信息
示例代码说明: 读取txt指定内容如地物id,输出OpenDRIVE数据中的对应地物id和名称name信息为xml文件 import xml.dom.minidom from xml.dom.minidom import parse from xml.dom import Node import sys import os # 读取OpenDRIVE文件路径 xml_filepath…...
Qt入门8——Qt文件
1. Qt文件概述 文件操作是应用程序必不可少的部分。Qt作为⼀个通用开发库,提供了跨平台的文件操作能力。Qt 提供了很多关于文件的类,通过这些类能够对文件系统进行操作,如文件读写、文件信息获取、文件复制或重命名等。 2. 输入输出设备类 在…...
【每天一道面试题】JWT是什么?Java-jwt是什么?(2024/12/7)
【每天一道面试题】JWT是什么?Java-jwt是什么?(2024/12/7) JWT:JSON Web Token 俗称令牌 当我们想实现: 1.用户不用输入用户名和密码就可以登录(不用每次都输入用户名和密码) 2.用户的信息在传…...
ORB-SLAM3源码学习:ImuTypes.cc:Eigen::Matrix3f RightJacobianSO3计算右雅可比矩阵
前言 计算右雅可比矩阵这个函数涉及到了函数重载,可以接受不同的参数来实现计算右雅可比矩阵。 代码分析 右雅可比矩阵: /** * brief 计算右雅可比* param xyz 李代数* return Jr*/ Eigen::Matrix3f RightJacobianSO3(const float &x, const fl…...
电子公文交换系统设计 ——基于商用密码标准的密码模块的应用
文章目录 《密码系统设计》实验实验项目实验四 密码模块的应用实践要求(40 分) 《密码系统设计》实验 实验项目 实验序号实验名称实验学时数实验目的实验内容实验类型学生学习预期成果实验四密码模块的应用6基于商用密码标准的密码模块的应用对电子公文…...
java抽象类
目录 一.抽象类 1.什么是抽象类 2.抽象类特点 (1)抽象类不能直接实例化对象 (2)可以包含抽象方法和具体方法 (3)可以有构造方法 (4)抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修…...
渤海证券基于互联网环境的漏洞主动防护方案探索与实践
来源:中国金融电脑 作者:渤海证券股份有限公司信息技术总部 刘洋 伴随互联网业务的蓬勃发展,证券行业成为黑客进行网络攻击的重要目标之一,网络攻击的形式也变得愈发多样且复杂。网络攻击如同悬于行业之上的达摩克利斯之剑&…...
ClouderaManager 集群搭建
前提:服务器之前做过域名映射、免密登录 ClouderaManager 集群 1. 组件分布规划 服务器服务器h1zk、hdfs(dn)、yarn(nm)、spark、kafka、flumeh2hdfs(nn-standy)、yarn(rm-active)、sparkh3hdfs(nn-active)、yarn(rm-standy)、hive、sparkh4zk、hdfs(dn)、yarn(n…...
Nginx部署PHP服务端跨域以及跨域携带cookie
🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回!!) 👉 个人专栏推荐:《前端项目教程以及代码》 ✨一、前言 前端技术栈Vue+后端技术栈PHP+Mysql鉴权以及存储信息用…...
流量转发利器之Burpsuite概述(1)
目录 一、Burpsuite Burp Suite Spider 的主要特点: 在 Burp Suite 中使用 Spider: Spider 的用例: 限制: 声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 声明:本文主要用作技…...
【优选算法 二分查找】二分查找算法入门详解:二分查找小专题
x 的平方根 题目解析 算法原理 解法一: 暴力解法 如果要求一个数(x)的平方根,可以从 0 往后枚举,直到有一个数(a),a^2<x,(a1)^2>x,a即为所求; 解法二:二分查找 …...
LeetCode—56. 合并区间(中等)
题目描述: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例1: 输入&#x…...
SHELL----正则表达式
一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下: -i 忽略大小写 -c 统计匹配的行数 -v 取反,不显示匹配的行 -w 匹配单词 -E 等价于 egrep ,即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…...