linux 字符串加入中括号,方括号及其在命令行中的不同用法介绍
通配
方括号最简单的用法就是通配。你可能在知道“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 字符串加入中括号,方括号及其在命令行中的不同用法介绍相关推荐
- 在 Linux 命令行中查找 IP 地址介绍
几年前,ifconfig 是 Linux 中最受欢迎的查询本机 IP 地址的方法.但是现如今 ifconfig 命令已经被启用了.在某些 Linux 发行版上已经不用了.那么,除此以外还有什么别的方式 ...
- linux命令行 正则,在Linux命令行中使用正则表达式
上一节我们介绍过grep命令在搜索文本信息时的基本用法,其实,grep命令还可以配合正则表达式执行更加复杂的搜索操作. 本节我们将对如何在Linux命令行中使用正则表达式进行介绍. 所谓正则表达式,就 ...
- 如何在Linux命令行中替换多个文件中的字符串
本文翻译自:How to replace a string in multiple files in linux command line I need to replace a string in ...
- linux 垃圾桶命令,linux下的一些好用的命令行
linux下的一些好用的命令行 添加环境变量 Linux 中需要将 libjakaAPI.so 和 jkrc.so 放在同一个文件夹下,并添加当前文件夹路径到环境变量, 使用命令 export LD_ ...
- mysql隐藏密码_MySQL在Linux系统中隐藏命令行中的密码的方法
在命令行中输入命令并不是一个好主意,会造成安全问题.但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息.那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?, ...
- linux快捷命令补齐,Linux Shell简介——自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式.doc...
Linux Shell简介--自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式 Unix (及后继者 Linux)在命令行下面诞生,因此,Unix 中的命令行有许多非常实用的功能. ...
- python object单引号变成双引号_Python学习第163课--Linux命令行中的单引号和双引号...
[每天几分钟,从零入门python编程的世界!] 我们都知道引号的作用就是为了引用,比如引用别人说的话,这句话就放在引号里面. 而Linux命令行中的single quote(单引号)和dubble ...
- linux php 指令,在 Linux 命令行中使用和执行 PHP 代码(一)
PHP是一个开源服务器端脚本语言,最初这三个字母代表的是"Personal Home Page",而现在则代表的是"PHP:Hypertext Preprocessor& ...
- linux命令行中,双引号中的感叹号将被解释为历史命令
linux命令行中,双引号中的感叹号将被解释为历史命令. 命令: test -e ttt/ && echo "file exist!" || echo " ...
最新文章
- 第十六届智能车竞赛参赛队伍提问-6-11
- IBM---Java 多线程与并发编程专题
- P6669 [清华集训2016] 组合数问题
- sqlserver 日期函数
- 图解python_可视化图解Python科学计算包NumPy
- 【bzoj5099】[POI2018]Pionek 双指针法
- 初探facebook的iOS/Mac OS X动画框架pop
- 有什么好用的画c语言流程图的软件?
- 记录一个修复ubuntu系统主机前置耳机孔没有声音的方法
- MFC 程序设计读书体会
- 如何有效管理远程开发团队
- 自动化框架到底是什么?
- 叉乘点乘混合运算公式_【“数”你好看】对数运算(Logarithm)
- iOS 全横屏app设置
- mysql.sock 文件详解
- 表白墙微信小程序源码
- php界面入门,web前端入门:一小时学会写页面 - 空酷狗
- 714.买卖股票含手续费
- 架构图解_图解 Docker 架构
- 如何在飞腾平台使用4G模块拨号上网