iiso 文件可以先看一下他是什么文件:

是 rar 文件解压:unrar x 1.iso
进入发现很多文件可以直接 grep 寻找:
grep flag * |
可以找到一个 inf 文件有一个提示是自动运行的是副本 32,可能有我们需要的东西,找一下

grep -oiaP 'flag{[^}]+}' "./autoflag - 副本 (32).exe" |
说明
-o 只输出匹配到的片段
-i 忽略大小写
-a 把二进制文件当文本扫
-P 启用 Perl 正则,直接捕获最常见的 flag{...} 格式

grep 使用方法:
-
最简骨架 grep [OPTIONS] PATTERN [FILE...]
功能:在文本 / 文件里按 “行” 为单位查找匹配 PATTERN 的行并打印。
- 核心选项速查(大写 = 长选项,小写 = 短选项)
| 选项 | 说明 |
|---|---|
| -i, --ignore-case | 忽略大小写 |
| -v, --invert-match | 反选:打印不匹配的行 |
| -n, --line-number | 显示行号 |
| -c, --count | 只输出匹配的行数 |
| -l, --files-with-matches | 只打印包含匹配的文件名(常用于批量搜索) |
| -L, --files-without-match | 只打印不含匹配的文件名 |
| -o, --only-matching | 只打印匹配到的文本,而非整行 |
| -q, --quiet / --silent | 静默模式,找到即返回 0,脚本里做判断 |
| -s, --no-messages | 不显示 “文件不存在” 等错误信息 |
| -r, -R, --recursive | 递归目录; -R 可跟随符号链接 |
| --include=GLOB | 只搜索符合通配符的文件(例: --include="*.c" ) |
| --exclude=GLOB | 排除文件 |
| --exclude-dir=DIR | 排除目录 |
| -w, --word-regexp | 整词匹配(前后不能是字母数字下划线) |
| -x, --line-regexp | 整行必须完全等于 PATTERN |
| -A NUM, --after-context=NUM | 匹配行后再打印 NUM 行 |
| -B NUM, --before-context=NUM | 匹配行前再打印 NUM 行 |
| -C NUM, -NUM, --context=NUM | 前后各 NUM 行( -C2 等价于 -2 ) |
| --color[=WHEN] | 高亮匹配文本(auto/always/never) |
| -m NUM, --max-count=NUM | 每个文件最多匹配 NUM 次即停止 |
| -a, --text | 强制把二进制文件当文本处理 |
| -P, --perl-regexp | 启用 Perl 兼容正则(PCRE) |
| -E, --extended-regexp | 启用扩展正则(ERE),等价于 egrep |
| -F, --fixed-strings | 禁用正则,纯文本查找,等价于 fgrep |
| -f FILE, --file=FILE | 从 FILE 中读取模式(每行一个) |
| -e PATTERN, --regexp=PATTERN | 显式指定模式,可多次出现(实现 “或” 逻辑) |
- 正则元字符(默认 BRE 基本正则)
| 元字符 | 功能 |
|---|---|
| . | 任意单字符 |
| * | 前一项 0 次或多次 |
| ^ | 行首 |
| $ | 行尾 |
| [abc] | 字符集 |
| 分组(BRE 需要反斜杠) | |
| \n | 反向引用第 n 组 |
| 区间重复(BRE 需转义) |
使用 -E 后转义要求减少: ( ) { } + ? | 直接可用。
-
高频实战示例
-
大小写不敏感、带行号、高亮
grep -in --color=auto 'error' logfile
-
递归搜索当前目录下所有 .c/.h 文件,列出文件名
grep -Rl --include='*.{c,h}' 'TODO' .
-
整词匹配 “main”,不要 “mainly”
grep -w 'main' *.c
-
输出匹配行及前后 2 行,并写入 result.txt
grep -C2 'exception' app.log > result.txt
-
多模式 “或”
grep -e 'fatal' -e 'error' -e 'panic' /var/log/messages
或
grep -E 'fatal|error|panic' /var/log/messages
-
反向引用(扩展正则)—— 找连续重复单词
grep -E '(\b\w+\b).*\b\1\b' file.txt
-
只打印匹配到的 IP 地址
grep -oE '(0-9.){3}0-9' access.log
-
二进制文件里搜字符串
grep -a 'flag' firmware.bin
更干净:strings firmware.bin | grep 'flag'
-
脚本里判断 “是否包含”
if grep -q 'backup.*ok' backup.log; then
echo "Backup succeeded"
fi
-
排除 svn/git 目录再搜索
grep -R --exclude-dir='.svn' --exclude-dir='.git' 'pattern' .
- 性能小贴士
- 先限定文件范围(--include/--exclude)比事后过滤快。
- 对超大文件且只要 “有无” 时,用
-q或-m1提前退出。 - 纯文本多关键字搜索,用
-F -f keywords.txt比正则快。 - 需要 PCRE 高级特性(零宽断言、非贪婪等)才加
-P。
- 与兄弟命令区别
egrep = grep -E
fgrep = grep -F (已废弃,但系统仍提供)
rg /ag/ack 第三方工具,递归速度更快、默认彩色、自动忽略 .git。
- 一句话总结
grep 就是 “行过滤器”:先定范围(文件 / 目录),再定模式(正则 / 固定),最后定输出(整行 / 仅匹配 / 前后文 / 计数 / 文件名)。把上面三张表背下来,90 % 的日常需求都能一行搞定。