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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23种设计模式-结构型模式-享元

文章目录 简介问题解决方案享元与不可变性享元工厂 代码总结 简介 亦称&#xff1a;缓存、Cache、Flyweight。享元是一种结构型设计模式&#xff0c;它摒弃了在每个对象中保存所有数据的方式&#xff0c;通过共享多个对象所共有的相同状态&#xff0c;让你能在有限的内存容量中…

MFC BCGControlBar

BCGControlBar&#xff08;也称为 BCGSoft 或 BCGControlBar Library&#xff09;是一个用于 MFC&#xff08;Microsoft Foundation Classes&#xff09; 的扩展库&#xff0c;主要提供现代化的 UI 控件、Ribbon 界面、工具栏、属性网格等组件&#xff0c;帮助开发者快速构建专…

【算法手记9】OR26 最长回文子串 NC369 [NOIP2002 普及组] 过河卒

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:刷题 ⚙️操作环境:牛客网 一.OR26 最长回文子串 牛客网题目链接(点击即可跳转):OR26 最长回文子串 题目详情: 本题详情如下图: 题目思路: 本题解题思路如下: 本题思路用中心扩展算法,遍历所有字符,将每个字符作为回文串…

批量删除或替换文本文件中指定的行,如删除第一行、删除最后一行

每一个文本文件中我们都可以插入非常多的行&#xff0c;我们可以对行的内容进行删除、修改等各种操作。如果文本文件中的某些行的内容需要更新&#xff0c;那我们就需要对其进行修改操作。想要修改文本文件的内容其实是非常方便的&#xff0c;但是如果想要批量的对多个文本文件…

LLM架构解析:词嵌入模型 Word Embeddings(第二部分)—— 从基础原理到实践应用的深度探索

本专栏深入探究从循环神经网络&#xff08;RNN&#xff09;到Transformer等自然语言处理&#xff08;NLP&#xff09;模型的架构&#xff0c;以及基于这些模型构建的应用程序。 本系列文章内容&#xff1a; NLP自然语言处理基础词嵌入&#xff08;Word Embeddings&#xff09…

机构数据服务

一、背景说明 券商/基金/银行等金融机构的数据中心&#xff0c;基本都外购有数十家各类数据&#xff0c;自有业务每天也在产生海量信息。如何有效管理和使用这些数据&#xff0c;通过数据服务&#xff0c;沉淀数据资产&#xff0c;机构研发和运维部门也在不断尝试和改进。 传…

中和农信:让金融“活水”精准浇灌乡村沃土

2025年政府工作报告首提“投资于人”概念&#xff0c;并22次提及“金融”&#xff0c;强调要着力抓好“三农”工作&#xff0c;深入推进乡村全面振兴&#xff1b;一体推进地方中小金融机构风险处置和转型发展&#xff1b;扎扎实实落实促进民营经济发展的政策措施&#xff0c;切…

JavaScript重难点突破:期约与异步函数

同步和异步 ​同步&#xff08;Synchronous&#xff09;​ ​定义&#xff1a;任务按顺序依次执行&#xff0c;前一个任务完成前&#xff0c;后续任务必须等待。 ​特点&#xff1a;阻塞性执行&#xff0c;程序逻辑直观&#xff0c;但效率较低 ​异步&#xff08;Asynchron…

学习总结 网格划分+瞬态求解设置

网格划分部分 1.导入几何文件 导入我们的几何模型&#xff0c;他的格式为.scdocx 2.添加局部尺寸BOI 因为要对对前缘和尾缘进行局部加密&#xff0c;所以进行一个BOI的局部加密&#xff0c;目标尺寸取的几何尺寸的最小尺寸的0.1&#xff0c;就是0.4mm。 3.生成表面网格 表面…

.NET 使用 WMQ 连接Queue 发送 message 实例

1. 首先得下载客户端&#xff0c;没有客户端无法发送message. 安装好之后长这样 我装的是7.5 安装目录如下 tools/dotnet 目录中有演示的demo 2. .Net 连接MQ必须引用bin目录中的 amqmdnet.dll 因为他是创建Queuemanager 的核心库&#xff0c; 项目中引用using IBM.WMQ; 才…

风电行业预测性维护解决方案:给风机装上 “智能医生”,实现故障 “秒级预警”

引言&#xff1a;风电设备故障为何成为 “运维黑洞”&#xff1f; 某海上风电场因齿轮箱轴承故障停机 3 天&#xff0c;直接损失 50 万元发电量。传统维护模式下&#xff0c;人工巡检覆盖率不足 40%&#xff0c;故障修复平均耗时 72 小时。而预测性维护通过物联网 AI 技术&am…

5、无线通信基站的FPGA实现架构

基站&#xff08;Base Station&#xff0c;BS&#xff09;&#xff0c;也称为公用移动通信基站&#xff0c;是无线电台站的一种形式&#xff0c;具体则指在一定的无线电覆盖区中&#xff0c;通过移动通信交换中心&#xff0c;与移动电话终端之间的信息传递的无线电收发信电台。…

笔记2——网络参考模型

一、OSI参考模型&#xff1a; 应用层&#xff1a; 报文 给应用程序提供接口 表示层&#xff1a; 进行数据格式的转换 会话层&#xff1a; 在通讯双方之间建立、管理和终止会话 传输层&#xff1a; 数据段&#xff1b;建立、维护、取消一次端到端的数据传输过程&#xff1b;控制…

最短路径:Bellman-Ford算法

Bellman-Ford的操作步骤 1.初始化距离&#xff1a;将起点的dist值设置为0&#xff0c;其他点的dist值设置为无穷大。 2.执行n-1轮松弛操作&#xff1a;遍历所有边&#xff0c;更新最短距离&#xff0c;收敛后可获得最短路径。 3.检测负权环&#xff1a;额外遍历一次&#xf…

0402-对象和类(访问器 更改器 日期类)

OOP&#xff1a;面向对象程序设计 类&#xff1a;构造对象的模板或蓝图 类构造对象的过程称为创建类的实例 封装&#xff1a;对外隐藏数据的真实实现方式&#xff0c;提供简单的方法 &#xff08;类比方向盘&#xff09; 对象&#xff1a;本质上是内存中的一小块空间 识别类&a…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的文件上传与下载:实现文件管理功能

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

搜索算法------DFS练习2

1. 题目 2. 思路和题解 从题目中可以看出&#xff0c;如果一个格子上有雨水&#xff0c;那么就可以流到周围比他高度低的单元格&#xff0c;如果单元格和海洋相邻&#xff0c;那么雨水也会流入海洋。总而言之一句话就是水从高处流向低处。从这里的流向可以联想到深度优先搜索这…

[python] 正则表达式

1.分割str s"1-2--3---4" are.findall(r\d|[-],s) # 输出&#xff1a;[1, -, 2, --, 3, ---, 4]s"-4(2(3)" # ? 表示 - 可以出现0次或1次 # \d 表示匹配一个或多个连续数字 # \D 表示匹配非数字字符 sre.findall(r-?\d|\D,s) # 输出&#xff1a;[-4, (,…

定制化管理系统与通用管理系统,谁更胜一筹?

一、定制化管理系统与通用管理系统的定义与特点 定制化管理系统 定制化管理系统是根据企业的具体业务需求和流程进行个性化开发的软件系统。它能够深度贴合企业的管理需求&#xff0c;提供高度灵活的解决方案。其特点包括&#xff1a; 高度适应性&#xff1a;能够精准匹配企业…

gitee 配置git上传

Git入门&#xff1f;查看 帮助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何连接本站, 如何导入仓库 简易的命令行入门教程: Git 全局设置: 以 176fuguM2项目为例 git config --global user.name "堕落圣甲虫" git config --global user.email "11…