通配

方括号最简单的用法就是通配。你可能在知道“Globbing”这个概念之前就已经通过通配来匹配内容了,列出具有相同特征的多个文件就是一个很常见的场景,例如列出所有 JPEG 文件:

ls *.jpg

使用通配符wildcard来得到符合某个模式的所有内容,这个过程就叫通配。

在上面的例子当中,星号(*)就代表“0 个或多个字符”。除此以外,还有代表“有且仅有一个字符”的问号(?)。因此

ls d*k*

可以列出 darkly 和 ducky,而且 dark 和 duck 也是可以被列出的,因为 * 可以匹配 0 个字符。而

ls d*k?

则只能列出 ducky,不会列出 darkly、dark 和 duck。

方括号也可以用于通配。为了便于演示,可以创建一个用于测试的目录,并在这个目录下创建文件:

touch file0{0..9}{0..9}

执行上面这个命令之后,就会创建 file000、file001、……、file099 这 100 个文件。

如果要列出这些文件当中第二位数字是 7 或 8 的文件,可以执行:

ls file0[78]?

如果要列出 file022、file027、file028、file052、file057、file058、file092、file097、file098,可以执行:

ls file0[259][278]

当然,不仅仅是 ls,很多其它的命令行工具都可以使用方括号来进行通配操作。但在删除文件、移动文件、复制文件的过程中使用通配,你需要有一点横向思维。

例如将 file010 到 file029 这 30 个文件复制成 archive010 到 archive029 这 30 个副本,不可以这样执行:

cp file0[12]? archive0[12]?

因为通配只能针对已有的文件,而 archive 开头的文件并不存在,不能进行通配。

而这条命令

cp file0[12]? archive0[1..2][0..9]

也同样不行,因为 cp 并不允许将多个文件复制到多个文件。在复制多个文件的情况下,只能将多个文件复制到一个指定的目录下:

mkdir archive

cp file0[12]? archive

这条命令是可以正常运行的,但它只会把这 30 个文件以同样的名称复制到 archive/ 目录下,而这并不是我们想要的效果。

如果你阅读过我关于花括号的文章,你大概会记得可以使用 % 来截掉字符串的末尾部分,而使用 # 则可以截掉字符串的开头部分。

例如:

myvar="Hello World"

echo Goodbye Cruel ${myvar#Hello}

就会输出 Goodbye Cruel World,因为 #Hello 将 myvar 变量中开头的 Hello 去掉了。

在通配的过程中,也可以使用这一个技巧。

for i in file0[12]?;\

do\

cp $i archive${i#file};\

done

上面的第一行命令告诉 Bash 需要对所有 file01 开头或者 file02 开头,且后面只跟一个任意字符的文件进行操作,第二行的 do 和第四行的 done 代表需要对这些文件都执行这一块中的命令。

第三行就是实际的复制操作了,这里使用了两次 $i 变量:第一次在 cp 命令中直接作为源文件的文件名使用,第二次则是截掉文件名开头的 file 部分,然后在开头补上一个 archive,也就是这样:

"archive" + "file019" - "file" = "archive019"

最终整个 cp 命令展开为:

cp file019 archive019

最后,顺带说明一下反斜杠 \ 的作用是将一条长命令拆分成多行,这样可以方便阅读。

在下一节,我们会了解方括号的更多用法,敬请关注。

本文由 LCTT 原创编译,Linux中国 荣誉推出

linux 字符串加入中括号,方括号及其在命令行中的不同用法介绍相关推荐

  1. 在 Linux 命令行中查找 IP 地址介绍

    几年前,ifconfig 是 Linux 中最受欢迎的查询本机 IP 地址的方法.但是现如今 ifconfig 命令已经被启用了.在某些 Linux 发行版上已经不用了.那么,除此以外还有什么别的方式 ...

  2. linux命令行 正则,在Linux命令行中使用正则表达式

    上一节我们介绍过grep命令在搜索文本信息时的基本用法,其实,grep命令还可以配合正则表达式执行更加复杂的搜索操作. 本节我们将对如何在Linux命令行中使用正则表达式进行介绍. 所谓正则表达式,就 ...

  3. 如何在Linux命令行中替换多个文件中的字符串

    本文翻译自:How to replace a string in multiple files in linux command line I need to replace a string in ...

  4. linux 垃圾桶命令,linux下的一些好用的命令行

    linux下的一些好用的命令行 添加环境变量 Linux 中需要将 libjakaAPI.so 和 jkrc.so 放在同一个文件夹下,并添加当前文件夹路径到环境变量, 使用命令 export LD_ ...

  5. mysql隐藏密码_MySQL在Linux系统中隐藏命令行中的密码的方法

    在命令行中输入命令并不是一个好主意,会造成安全问题.但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息.那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?, ...

  6. linux快捷命令补齐,Linux Shell简介——自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式.doc...

    Linux Shell简介--自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式 Unix (及后继者 Linux)在命令行下面诞生,因此,Unix 中的命令行有许多非常实用的功能. ...

  7. python object单引号变成双引号_Python学习第163课--Linux命令行中的单引号和双引号...

    [每天几分钟,从零入门python编程的世界!] 我们都知道引号的作用就是为了引用,比如引用别人说的话,这句话就放在引号里面. 而Linux命令行中的single quote(单引号)和dubble ...

  8. linux php 指令,在 Linux 命令行中使用和执行 PHP 代码(一)

    PHP是一个开源服务器端脚本语言,最初这三个字母代表的是"Personal Home Page",而现在则代表的是"PHP:Hypertext Preprocessor& ...

  9. linux命令行中,双引号中的感叹号将被解释为历史命令

    linux命令行中,双引号中的感叹号将被解释为历史命令. 命令: test -e ttt/ && echo "file exist!" || echo " ...

最新文章

  1. 第十六届智能车竞赛参赛队伍提问-6-11
  2. IBM---Java 多线程与并发编程专题
  3. P6669 [清华集训2016] 组合数问题
  4. sqlserver 日期函数
  5. 图解python_可视化图解Python科学计算包NumPy
  6. 【bzoj5099】[POI2018]Pionek 双指针法
  7. 初探facebook的iOS/Mac OS X动画框架pop
  8. 有什么好用的画c语言流程图的软件?
  9. 记录一个修复ubuntu系统主机前置耳机孔没有声音的方法
  10. MFC 程序设计读书体会
  11. 如何有效管理远程开发团队
  12. 自动化框架到底是什么?
  13. 叉乘点乘混合运算公式_【“数”你好看】对数运算(Logarithm)
  14. iOS 全横屏app设置
  15. mysql.sock 文件详解
  16. 表白墙微信小程序源码
  17. php界面入门,web前端入门:一小时学会写页面 - 空酷狗
  18. 714.买卖股票含手续费
  19. 架构图解_图解 Docker 架构
  20. 如何在飞腾平台使用4G模块拨号上网

热门文章

  1. vue 数组数据改变 视图不更新解决方案
  2. 软件测试反例,基于模型检测多反例对软件进行调试
  3. echarts 地图实现轮播(一)
  4. StyleAI:印象坐标-感情色彩量化/感情近邻关系
  5. Tensorflow Summary: 查看Tensorflow Model pb格式模型的信息
  6. Git 最佳实践:分支管理
  7. Redis保存Java Session
  8. Oracle EBS R12.1.1 应用克隆 - 2
  9. Spring Boot + Shiro 集成
  10. Node.js 切近实战(十一) 之实时通讯