当前位置: 首页 > news >正文

命令行工具篇 | grep, findstr

文本匹配(查找/筛选/过滤)工具:grep(Linux命令行),findstr(Windows命令行)

1. grep

功能:过滤文件中符合某些文本模式(例如包含指定字符)的文本

用例1:检索包含字符串"Hello"的内容

grep "Hello" file.txt

用例2:检索仅包含"behilos"的文本 [1]

grep '^[behilos]*$' /usr/dict/web2
  • [behilos]代表字符集合{b, e, h, i, l, o, s};

详细指令文档、正则表达式、预定义的集合,在Linux命令行中使用 man grep 查看。

注:类Unixshell中双引号与单引号的使用

1. 单引号(强引用)

  • shell会忽略括号内的所有字符的特殊含义
  • 变量(如 $PATH)不会被展开
  • 正则表达式中的特殊字符(如 $, *, !)会原封不动地传递给 grep
  • 编写正则表达式时最安全、最推荐的方式,避免了 shell 的意外干扰;

2. 双引号(弱引用):

  • shell会处理括号内大部分字符的特殊含义;
  • 例如:遇到变量(如 $USER)会被展开,命令替换(如 $(whoami))会被执行;

例如,shell 会先将 $USER 替换成当前用户名,再传递给 grep

grep "Hello, $USER" file.txt

2. finstr

功能:检索文件中的文本模式,类似于Linux中的grep;

(栈溢出逆向的使用场景:写ROP链时检索预处理过的Gadget列表;)

用例:筛选每行中包含字符串“任意字符串开头+push esp+任意字符串+ret;结尾”的内容;

findstr /r /c:"^.*push esp.*ret;$" gadgets.txt > findstr-output.txt
  • /r:将搜索字符串作为正则表达式进行处理(默认设置)
  • /c:<string>:使用指定的文本作为文本搜索字符串(字符串有空格的时候使用双引号包括);
  • .*:匹配中间任意数量的任意字符
  • ^:行首
  • $:行尾

正则表达式使用文本字符和元字符查找文本模式,而不是确切的字符串;

  • 文本字符是在正则表达式语法中没有特殊含义的字符,它只是匹配该字符的出现,字母和数字是文本字符;
  • 元字符是正则表达式语法中具有特殊含义的符号(运算符或分隔符);

元字符

Meta-character 元字符

Value

.

通配符 - 任何字符

*

重复 - 上一个字符或类出现零次或多次。

^

起始行位置 - 行的开头。

$

结束行位置 - 行的末尾。

[class]

字符类 - 集合中的任意一个字符。

[^class]

Inverse class - 不在集合中的任意一个字符。

[x-y]

范围 - 指定范围内的任何字符。

\x

转义 - 元字符的字面使用。

\<string

起始单词位置 - 单词的开头。

string\>

结束单词位置 - 单词的结尾。

findstr 常用参数:

Parameter

Description

/r

将搜索字符串作为正则表达式进行处理。 这是默认设置。

/c:<string>

使用指定的文本作为文本搜索字符串。

<strings>

指定要在 文件名中搜索的文本。 Required.

/i

在搜索字符串时忽略字符大小写。

/v

仅打印不包含匹配项的行。

*使用/c:指定搜索字符串的时候,有空格的字符串的正则需要用双引号包裹;

  • findstr (Windows 命令行中)的单引号不能替代双引号的使用;
  • 未使用双引号的时候会自动以空格截断,下一个字符串会被作为检索的目标文件名;

参考引用

[1] 《UNIX传奇》P87

[2] https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/findstr

  • 正则表达式的匹配需要进行测试验证;
  • grep默认使用基本正则(BRE),grep -E使用扩展正则(ERE);


文章转载自:

http://Tg44xcfL.qfdyt.cn
http://v8njGKUQ.qfdyt.cn
http://TGF7B9AI.qfdyt.cn
http://Yer4OkRI.qfdyt.cn
http://ga0DHshw.qfdyt.cn
http://Lf5X6ANs.qfdyt.cn
http://E4o5mwOp.qfdyt.cn
http://sljEQ73f.qfdyt.cn
http://6Inge8yZ.qfdyt.cn
http://PrpWpeWG.qfdyt.cn
http://GNxr7Liu.qfdyt.cn
http://P95QecCb.qfdyt.cn
http://il50qKRD.qfdyt.cn
http://q9OjHaTo.qfdyt.cn
http://Tkc57lDF.qfdyt.cn
http://7YpQGQFH.qfdyt.cn
http://aGLG3nKF.qfdyt.cn
http://kgdRhNWC.qfdyt.cn
http://eMIvVpgT.qfdyt.cn
http://fCurYFYN.qfdyt.cn
http://RBuGm9R5.qfdyt.cn
http://fGK28JcY.qfdyt.cn
http://ZHpXFs4f.qfdyt.cn
http://f5D3UROH.qfdyt.cn
http://zVivtPkw.qfdyt.cn
http://kprI3aYI.qfdyt.cn
http://7nZp1jmP.qfdyt.cn
http://83HSYsKY.qfdyt.cn
http://HcLzyrgA.qfdyt.cn
http://3evhGPQP.qfdyt.cn
http://www.dtcms.com/a/383502.html

相关文章:

  • 6【鸿蒙/OpenHarmony/NDK】多线程调用 JS 总崩溃?用 napi_create_threadsafe_function 搞定线程安全交互
  • OpenTenBase分布式HTAP实战:从Oracle迁移到云原生数据库的完整指南
  • LabVIEW信号监测与分析
  • 【大模型算法工程师面试题】大模型领域新兴的主流库有哪些?
  • Java队列(从内容结构到经典练习一步到位)
  • Cherno OpenGL 教程
  • RT-DETRv2 中的坐标回归机制深度解析:为什么用 `sigmoid(inv_sigmoid(ref) + delta)` 而不是除以图像尺寸?
  • OpenCV入门教程
  • 深度学习-计算机视觉-目标检测三大算法-R-CNN、SSD、YOLO
  • 冰火两重天:AI重构下的IT就业图景
  • 从ENIAC到Linux:计算机技术与商业模式的协同演进——云原生重塑闭源主机,eBPF+WebAssembly 双引擎的“Linux 内核即服务”实践
  • 从 MySQL 迁移到 GoldenDB,上来就踩了一个坑。
  • qt界面开发入门以及计算器制作
  • SQL 核心概念与实践总结
  • 【Tourbox】怎么复制预设?
  • RTT操作系统(2)
  • 基于STM32单片机智能手表GSM短信上报GPS定位防丢器设计
  • 力扣658.找到K个最接近的元素
  • LeetCode 面试经典 150_哈希表_赎金信(39_383_C++_简单)
  • LeetCode热题100--114. 二叉树展开为链表--中等
  • 【交易系统系列33】从Raft到Kafka:解构交易所核心系统的一致性与数据持久化之道
  • 数据结构---基于顺序存储结构实现的双端队列
  • C4D建模入门指南:核心术语与高效设置详解
  • Unity核心概念⑧:Input
  • 软考高级-系统架构设计师之指令系统
  • Kafka 运维实战基本操作含命令与最佳实践
  • CAS理解
  • Linux动静态库开发基础:静态库与动态库的编译构建、链接使用及问题排查
  • 深度学习的定义
  • 数据库造神计划第七天---增删改查(CRUD)(3)