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

image-20251109202829840

是 rar 文件解压:unrar x 1.iso

进入发现很多文件可以直接 grep 寻找:

grep flag *

可以找到一个 inf 文件有一个提示是自动运行的是副本 32,可能有我们需要的东西,找一下

image-20251109202736948

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

image-20251109203542944

grep 使用方法:

  1. 最简骨架 grep [OPTIONS] PATTERN [FILE...]

    功能:在文本 / 文件里按 “行” 为单位查找匹配 PATTERN 的行并打印。


  1. 核心选项速查(大写 = 长选项,小写 = 短选项)
选项 说明
-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 显式指定模式,可多次出现(实现 “或” 逻辑)

  1. 正则元字符(默认 BRE 基本正则)
元字符 功能
. 任意单字符
* 前一项 0 次或多次
^ 行首
$ 行尾
[abc] 字符集
分组(BRE 需要反斜杠)
\n 反向引用第 n 组
区间重复(BRE 需转义)

使用 -E 后转义要求减少: ( ) { } + ? | 直接可用。


  1. 高频实战示例

  2. 大小写不敏感、带行号、高亮

    grep -in --color=auto 'error' logfile

  3. 递归搜索当前目录下所有 .c/.h 文件,列出文件名

    grep -Rl --include='*.{c,h}' 'TODO' .

  4. 整词匹配 “main”,不要 “mainly”

    grep -w 'main' *.c

  5. 输出匹配行及前后 2 行,并写入 result.txt

    grep -C2 'exception' app.log > result.txt

  6. 多模式 “或”

    grep -e 'fatal' -e 'error' -e 'panic' /var/log/messages

    grep -E 'fatal|error|panic' /var/log/messages

  7. 反向引用(扩展正则)—— 找连续重复单词

    grep -E '(\b\w+\b).*\b\1\b' file.txt

  8. 只打印匹配到的 IP 地址

    grep -oE '(0-9.){3}0-9' access.log

  9. 二进制文件里搜字符串

    grep -a 'flag' firmware.bin

    更干净:strings firmware.bin | grep 'flag'

  10. 脚本里判断 “是否包含”

    if grep -q 'backup.*ok' backup.log; then

    echo "Backup succeeded"

    fi

  11. 排除 svn/git 目录再搜索

    grep -R --exclude-dir='.svn' --exclude-dir='.git' 'pattern' .


  1. 性能小贴士
  • 先限定文件范围(--include/--exclude)比事后过滤快。
  • 对超大文件且只要 “有无” 时,用 -q-m1 提前退出。
  • 纯文本多关键字搜索,用 -F -f keywords.txt 比正则快。
  • 需要 PCRE 高级特性(零宽断言、非贪婪等)才加 -P

  1. 与兄弟命令区别

egrep = grep -E

fgrep = grep -F (已废弃,但系统仍提供)

rg /ag/ack 第三方工具,递归速度更快、默认彩色、自动忽略 .git。


  1. 一句话总结

grep 就是 “行过滤器”:先定范围(文件 / 目录),再定模式(正则 / 固定),最后定输出(整行 / 仅匹配 / 前后文 / 计数 / 文件名)。把上面三张表背下来,90 % 的日常需求都能一行搞定。

Edited on Views times

Give me a cup of [coffee]~( ̄▽ ̄)~*

ztyzty WeChat Pay

WeChat Pay

ztyzty Alipay

Alipay

ztyzty PayPal

PayPal