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

Bash 花括号扩展 {start..end} 进阶使用指南——字典生成

Bash 的花括号扩展(brace expansion){start..end} 是一个强大而灵活的语法特性,用于生成特定序列或组合。它在脚本编写、爆破字典生成、文件批量操作以及模式匹配中有着广泛的应用。本文将从基础用法到高级技巧,带你全面掌握这一功能。


1. 基础用法:从简单序列开始

{start..end} 是 Bash 花括号扩展的核心语法,用于生成从 startend 的连续序列,支持数字和字母。

1.1 数字序列

echo {1..5}
  • 输出:1 2 3 4 5
  • 用途:快速生成连续数字列表。

1.2 字母序列

echo {a..e}
  • 输出:a b c d e
  • 说明:支持小写和大写字母,基于 ASCII 顺序。

1.3 带步长的序列(Bash 4.0+)

echo {1..10..2}
  • 输出:1 3 5 7 9
  • 格式:{start..end..increment},步长可正可负。
  • 示例:{10..1..-2} 输出 10 8 6 4 2

1.4 反向序列

echo {5..1}
  • 输出:5 4 3 2 1
  • 提示:无需显式步长,默认递减 1。

2. 进阶用法:组合与扩展

花括号扩展的真正威力在于其组合能力和灵活性。

2.1 多范围组合(笛卡尔积)

多个 {..} 紧邻时,会生成所有可能的组合:

echo {a..c}{1..2}
  • 输出:a1 a2 b1 b2 c1 c2
  • 原理:类似数学中的笛卡尔积。

2.2 用逗号合并集合

用逗号分隔的项构成并集:

echo {a,b,c}
  • 输出:a b c

嵌套范围:

echo {{a..c},{0..1}}
  • 输出:a b c 0 1
  • 注意:这是并集而非组合。

复杂组合:

echo {{a..c},{0..1}}{x,y}
  • 输出:ax ay bx by cx cy 0x 0y 1x 1y
  • 总项数:5 × 2 = 10。

2.3 添加前缀和后缀

echo user{1..3}@domain.com
  • 输出:user1@domain.com user2@domain.com user3@domain.com
  • 用途:生成批量用户名、URL 等。

2.4 空格分隔的独立扩展

空格分隔的 {..} 各自独立扩展:

echo {a..b} {1..2}
  • 输出:a b 1 2
  • 区别:与紧邻的笛卡尔积不同。

2.5 数字填充(补零)

echo {01..05}
  • 输出:01 02 03 04 05
  • 规则:以起始值的位数为准,自动补零。

3. 爆破字典生成:实用场景

花括号扩展在生成爆破字典(如密码、文件名)时尤为高效。

3.1 多位组合

固定模式:

echo {a..z}{A..Z}{0..9}
  • 输出:aA0 aA1 ... zZ9
  • 总项数:26 × 26 × 10 = 6760。

全字符集:

echo {{a..z},{A..Z},{0..9}}{{a..z},{A..Z},{0..9}}{{a..z},{A..Z},{0..9}}
  • 输出:aaa aab ... 999
  • 总项数:62³ = 238,328。

3.2 年份字典

echo {2020..2025}
  • 输出:2020 2021 2022 2023 2024 2025
  • 用途:生成时间相关的测试数据。

3.3 美化输出

换行显示:

echo {a..c}{0..2} | tr ' ' '\n'
  • 输出:
    a0
    a1
    a2
    b0
    b1
    b2
    c0
    c1
    c2
    

3.4 动态生成 N 位字典

N=3
cmd="echo "
for ((i=1; i<=N; i++)); docmd="$cmd{{a..z},{A..Z},{0..9}}"
done
eval "$cmd" > dict.txt
  • 输出:3 位全字符组合,保存至 dict.txt

4. 高级技巧:脚本与文件操作

4.1 批量文件操作

touch file{1..3}.txt
  • 效果:创建 file1.txt file2.txt file3.txt

4.2 管道与参数处理

echo {a..c}{0..1} | xargs -n 1 echo "Test:"
  • 输出:
    Test: a0
    Test: a1
    Test: a2
    Test: b0
    ...
    

4.3 条件过滤

结合 grep 筛选:

echo {a..z}{0..9} | grep -E '^[aeiou]'
  • 输出:a0 a1 ... u9
  • 用途:提取特定模式。

4.4 嵌套目录结构

mkdir -p dir{1..2}/sub{1..2}
  • 效果:创建 dir1/sub1 dir1/sub2 dir2/sub1 dir2/sub2

5. 注意事项与限制

  1. 语法限制
    • {a..z,A..Z,0..9} 无效,需用 {{a..z},{A..Z},{0..9}}
  2. 内存限制
    • 大范围(如 {1..1000000})可能耗尽内存,建议用 seq 1 1000000
  3. 变量嵌入
    • {1..$n} 需配合 eval
      n=5; eval echo {1..$n}
      

6. 完整爆破字典脚本示例

#!/bin/bash
N=3
TEMPLATE="Testing ???\r"
cmd="echo "
for ((i=1; i<=N; i++)); docmd="$cmd{{a..z},{A..Z},{0..9}}"
done
eval "$cmd" | while read line; doecho "$TEMPLATE" | awk -v a="$line" '{gsub(/\?\?\?/, a)}1' | tr -d '\n'echo "$line" >> dict.txt
done
echo -e "\nDone!"
  • 功能:生成 3 位组合,显示进度并保存至 dict.txt
  • 输出示例:Testing aaaTesting 999

7. 与其他工具对比

7.1 Crunch

crunch 3 3 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 -o dict.txt
  • 优势
    • 高效处理大规模字典,内存占用优化。
    • 支持复杂模式(如固定字符、模板)。
    • 可直接输出到文件,避免管道开销。
  • 劣势
    • 非 Bash 内置,需安装。
    • 配置稍复杂,学习曲线略高。
  • 适用场景:生成超大爆破字典(如密码破解)。

7.2 Bash {start…end}

echo {a..z}{A..Z}{0..9} > dict.txt
  • 优势
    • Bash 内置,无需额外依赖,开箱即用。
    • 语法简洁,适合快速生成中小规模序列或组合。
    • 与管道和脚本无缝集成。
  • 劣势
    • 内存受限,大范围扩展(如 {1..1000000})可能导致崩溃。
    • 不支持复杂模式或动态模板。
  • 适用场景:临时生成小规模数据、脚本中的快速迭代。

7.3 seq

seq 1 2 10
  • 功能:生成数字序列,支持步长。
  • 输出示例1 3 5 7 9(步长为 2)。
  • 优势
    • 专为数字序列设计,性能优于 {start..end}
    • 支持浮点数(如 seq 1 0.5 3 输出 1 1.5 2 2.5 3)。
    • 内存占用低,适合超大范围。
  • 劣势
    • 仅限数字,不支持字母或组合。
    • 需要配合其他工具实现复杂功能。
  • 适用场景:生成大范围数字序列(如循环计数、文件名编号)。
  • 用法示例
    for i in $(seq 1 1000000); do echo "file$i.txt"; done
    

对比总结

工具内置性支持类型内存效率复杂模式适用规模
{start..end}数字、字母、组合小中规模
seq数字大规模
crunch数字、字母、组合超大规模

结语

Bash 花括号扩展 {start..end} 语法简单却功能强大,掌握其基础与进阶用法,能极大提升脚本效率。无论是生成测试数据、批量操作文件,还是创建爆破字典,它都是不可或缺的利器。结合管道和其他工具,您可以解锁更多可能性!

相关文章:

Bash 花括号扩展 {start..end} 进阶使用指南——字典生成

Bash 的花括号扩展&#xff08;brace expansion&#xff09;{start..end} 是一个强大而灵活的语法特性&#xff0c;用于生成特定序列或组合。它在脚本编写、爆破字典生成、文件批量操作以及模式匹配中有着广泛的应用。本文将从基础用法到高级技巧&#xff0c;带你全面掌握这一功…...

AGI大模型(10):prompt逆向-巧借prompt

1 提示词逆向 明确逆向提示词⼯程概念 我们可以给ChatGPT提供⼀个简洁的提示词,让它能够更准确地理解我们所讨论的“逆向提示词⼯程”是什么意思,并通过这个思考过程,帮它将相关知识集中起来,进⽽构建⼀个专业的知识领域 提示词:请你举⼀个简单的例⼦,解释⼀下逆向pro…...

蓝桥云客--团队赛

2.团队赛【算法赛】 - 蓝桥云课 问题描述 蓝桥杯最近推出了一项团队赛模式&#xff0c;要求三人组队参赛&#xff0c;并规定其中一人必须担任队长。队长的资格很简单&#xff1a;其程序设计能力值必须严格大于其他两名队友程序设计能力值的总和。 小蓝、小桥和小杯正在考虑报名…...

C-S模式之实现一对一聊天

天天开心&#xff01;&#xff01;&#xff01; 文章目录 一、如何实现一对一聊天&#xff1f;1. 服务器设计2. 客户端设计3. 服务端代码实现4. 客户端代码实现5. 实现说明6.实验结果 二、改进常见的服务器高并发方案1. 多线程/多进程模型2. I/O多路复用3. 异步I/O&#xff08;…...

[Deep-ML]Transpose of a Matrix(矩阵的转置)

Transpose of a Matrix&#xff08;矩阵的转置&#xff09; 题目链接&#xff1a; Transpose of a Matrix&#xff08;矩阵的转置&#xff09;https://www.deep-ml.com/problems/2 题目描述&#xff1a; 难度&#xff1a; easy&#xff08;简单&#xff09;。 分类&#…...

Java的Selenium的特殊元素操作与定位之select下拉框

如果页面元素是一个下拉框&#xff0c;我们可以将此web元素封装为Select对象 Select selectnew Select(WebElement element); Select对象常用api select.getOptions();//获取所有选项select.selectBylndex(index);//根据索引选中对应的元素select.selectByValue(value);//选…...

前端精度计算:Decimal.js 基本用法与详解

一、Decimal.js 简介 decimal.js 是一个用于任意精度算术运算的 JavaScript 库&#xff0c;它可以完美解决浮点数计算中的精度丢失问题。 官方API文档&#xff1a;Decimal.js 特性&#xff1a; 任意精度计算&#xff1a;支持大数、小数的高精度运算。 链式调用&#xff1a;…...

智慧节能双突破 强力巨彩谷亚VK系列刷新LED屏使用体验

当前全球节能减排趋势明显&#xff0c;LED节能屏作为显示技术的佼佼者&#xff0c;正逐渐成为市场的新宠。强力巨彩谷亚万境VK系列节能智慧屏凭借三重技术保障、四大智能设计以及大师臻彩画质&#xff0c;在实现节能效果的同时&#xff0c;更在智慧显示领域树立新的标杆。   …...

html 给文本两端加虚线自适应

效果图&#xff1a; <div class"separator">文本 </div>.separator {width: 40%;border-style: dashed;display: flex;align-items: center;color: #e2e2e2;font-size: 14px;line-height: 20px;border-color: #e2e2e2;border-width: 0; }.separator::bef…...

C#:is关键字

目录 is 关键字的核心是什么&#xff1f; 1. 什么是 is 关键字&#xff0c;为什么要用它&#xff1f; 2. 如何使用 is 关键字&#xff1f; 3. is 的作用和场景 4. is 与 as 的区别 5. 模式匹配的扩展&#xff08;C# 8.0&#xff09; 6. 常见陷阱和注意事项 总结&#x…...

leetcode4.寻找两个正序数组中的中位数

思路源于 LeetCode004-两个有序数组的中位数-最优算法代码讲解 基本思路是将两个数组看成一个数组&#xff0c;然后划分为两个部分&#xff0c;若为奇数左边部分个数多1&#xff0c;若为偶数左边部分等于右边部分个数。i表示数组1划分位置&#xff08;i为4是索引4也表示i的左半…...

0101安装matplotlib_numpy_pandas-报错-python

文章目录 1 前言2 报错报错1&#xff1a;ModuleNotFoundError: No module named distutils报错2&#xff1a;ERROR:root:code for hash blake2b was not found.报错3&#xff1a;**ModuleNotFoundError: No module named _tkinter**报错4&#xff1a;UserWarning: Glyph 39044 …...

Qt之QHostInfo

简介 QHostInfo表示主机信息&#xff0c;即主机名称 常用接口 static QHostInfo fromName(const QString &name); QString hostName() const; QList<QHostAddress> addresses() const;结构 #mermaid-svg-HTJ95sEk8JwO4uCy {font-family:"trebuchet ms",…...

OSCP - Proving Grounds- SoSimple

主要知识点 wordpress 插件RCE漏洞sudo -l shell劫持 具体步骤 依旧是nmap 起手&#xff0c;只发现了22和80端口&#xff0c;但80端口只能看到一张图 Nmap scan report for 192.168.214.78 Host is up (0.46s latency). Not shown: 65533 closed tcp ports (reset) PORT …...

JVM虚拟机篇(五):深入理解Java类加载器与类加载机制

深入理解Java类加载器与类加载机制 深入理解Java类加载器与类加载机制一、引言二、类加载器2.1 类加载器的定义2.2 类加载器的分类2.2.1 启动类加载器&#xff08;Bootstrap ClassLoader&#xff09;2.2.2 扩展类加载器&#xff08;Extension ClassLoader&#xff09;2.2.3 应用…...

Golang的Goroutine(协程)与runtime

目录 Runtime 包概述 Runtime 包常用函数 1. GOMAXPROCS 2. Caller 和 Callers 3. BlockProfile 和 Stack 理解Golang的Goroutine Goroutine的基本概念 特点&#xff1a; Goroutine的创建与启动 示例代码 解释 Goroutine的调度 Gosched的作用 示例代码 输出 解…...

C语言求3到100之间的素数

一、代码展示 二、运行结果 三、感悟思考 注意: 这个题思路他是一个试除法的一个思路 先进入一个for循环 遍历3到100之间的数字 第二个for循环则是 判断他不是素数 那么就直接退出 这里用break 是素数就打印出来 在第一个for循环内 第二个for循环外...

【2025】物联网发展趋势介绍

目录 物联网四层架构感知识别层网络构建层管理服务层——**边缘存储**边缘计算关键技术&#xff1a;综合应用层——信息应用 物联网四层架构 综合应用层&#xff1a;信息应用 利用获取的信息和知识&#xff0c;支持各类应用系统的运转 管理服务层&#xff1a;信息处理 对数据进…...

如何查看 MySQL 的磁盘空间使用情况:从表级到数据库级的分析

在日常数据库管理中&#xff0c;了解每张表和每个数据库占用了多少磁盘空间是非常关键的。这不仅有助于我们监控数据增长&#xff0c;还能为性能优化提供依据。 Google Gemini中国版调用Google Gemini API&#xff0c;中国大陆优化&#xff0c;完全免费&#xff01;https://ge…...

AI平台初步规划实现和想法

要实现一个类似Coze的工作流搭建引擎&#xff0c;可以结合SmartEngine作为后端工作流引擎&#xff0c;ReactFlow作为前端流程图渲染工具&#xff0c;以及Ant Design作为UI组件库。以下是实现的步骤和关键点&#xff1a; ### 1. 后端工作流引擎&#xff08;SmartEngine&#xf…...

ARXML文件解析-2

目录 1 摘要2 常见ARXML文件注意事项以及常见问题2.1 注意事项2.2 常见问题2.3 答疑 3 ARXML解读/编辑指南3.1 解读ARXML文件的步骤3.2 编辑ARXML文件的方法3.3 验证与调试 4 总结 1 摘要 本文主要对ARXML文件的注意事项、常见问题以及解读与编辑进行详细介绍。 上文回顾&…...

汇编学习之《移位指令》

这章节学习前需要回顾之前的标志寄存器的内容&#xff1a; 汇编学习之《标志寄存器》 算数移位指令 SAL (Shift Arithmetic Left)算数移位指令 : 左移一次&#xff0c;最低位用0补位&#xff0c;最高位放入EFL标志寄存器的CF位&#xff08;进位标志&#xff09; OllyDbg查看…...

Nature Communications上交、西湖大学、复旦大学研发面向机器人多模式运动的去电子化刚弹耦合高频自振荡驱动单元

近年来&#xff0c;轻型仿生机器人因其卓越的运动灵活性与环境适应性受到国际机器人领域的广泛关注。然而&#xff0c;现有气动驱动器普遍受限于低模量粘弹性材料的回弹滞后效应与能量耗散特性&#xff0c;加之其"非刚即柔"的二元结构设计范式&#xff0c;难以同时满…...

对备忘录模式的理解

对备忘录模式的理解 一、场景1、题目【[来源](https://kamacoder.com/problempage.php?pid1095)】1.1 题目描述1.2 输入描述1.3 输出描述1.4 输入示例1.5 输出示例 2、理解需求 二、不采用备忘录设计模式1、代码2、问题3、错误的备忘录模式 三、采用备忘录设计模式1、代码1.1 …...

【国产突围!致远电子ZXDoc如何打破Vector垄断,成为新能源车研发“神器”?】

摘要&#xff1a;在汽车“新四化”浪潮下&#xff0c;国产汽车总线工具链软件正迎来高光时刻&#xff01;广州致远电子推出的ZXDoc以全栈自主化技术硬核国产芯片生态&#xff0c;斩获2024金辑奖“最佳技术实践应用奖”&#xff0c;成为新能源车企研发工程师的“效率倍增器”。本…...

【数据结构】图的基本概念

图的定义 通俗来说一堆顶点被一堆线连在一起&#xff0c;这一坨顶点与线的集合 目录 图的定义 术语 有向图与无向图 简单图与多重图 度、入度与出度 路径与回路 路径长度与距离 子图 连通、连通图与连通分量 强连通、强连通图与强连通分量 完全图 生成树与生成森林 权…...

常见的HR面问题汇总

⚠️注意&#xff1a;以下仅是个人对问题的参考&#xff0c;具体情况视个人情况而定&#xff5e; 1. 你觉得你有哪些优点和缺点&#xff1f; 优点&#xff1a;学习能力强&#xff0c;遇到问题会主动思考和查找解决方案&#xff1b;有责任心&#xff0c;对待工作认真负责&#…...

【微知】ARM CPU是如何获取某个进程的页表的?(通过TTBR寄存器,MMU进行处理)

ARM CPU 中用于存储访问某个进程的页表的寄存器是 TTBR&#xff08;Translation Table Base Register&#xff09;。有TTBR0和TTBR1。TTBR0用户空间的一级页表基址&#xff0c;1是内核页表。cpu访存获取物理地址流程 如果mmu发现tlb里面miss就通过pdbg拿pa物理地址。Intel是CR3…...

从零开始:在Qt中使用OpenGL绘制指南

从零开始&#xff1a;在Qt中使用OpenGL绘制指南 本文只介绍基本的 QOpenGLWidget 和 QOpenGLFunctions 的使用&#xff0c;想要学习 OpenGL 的朋友&#xff0c;建议访问经典 OpenGL 学习网站&#xff1a;LearnOpenGL CN 本篇文章&#xff0c;我们将以绘制一个经典的三角形为例&…...

激光加工中平面倾斜度的矫正

在激光加工中&#xff0c;加工平面的倾斜度矫正至关重要&#xff0c;直接影响加工精度和材料处理效果。以下是系统的矫正方法和步骤&#xff1a; 5. 验证与迭代 二次测量&#xff1a;加工后重新检测平面度&#xff0c;确认残余误差。 反馈优化&#xff1a;根据误差分布修正补偿…...