shell学习三十五天----波浪号展开与通配符
波浪号展开与通配符
shell中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式.
波浪号展开
如果命令行字符串的第一个字符为波浪号(~),或者变量指定(例如PATH或CDPATH变量)的值里任何未被引号括起来的冒号之后的第一个字符为波浪号(~)时,shell变回执行波浪号展开.
波浪号展开的目的,将用户根目录的符号型表示方式,改为实际的目录路径.可以采用直接或间接的方式指定执行此程序的用户,如未明白指定,则为当前的用户:
命令:vi ~/.profile 与vi $HOME/.profile相同
命令:vi ~root/.profile 编辑用户root的.profile文件
案例分析:第一个命令,shell将~换成$HOME,也就是当前用户的根目录.第二个命令,则是shell在系统的密码库里,需找用户root,再将~root置换为root的根目录.
使用波浪号的好处:
1.这是一种简介的概念表示方式
2.这可以避免在程序里把路径名称直接编码,例如:
有一段bash脚本:
printf “enter username : ”
read user
vi /home/$user/.profile 编辑该用户的.profile文件
这段程序假设所有用户的根目录都在/home之下.如果这又任何变动(例如,用户子目录根据部门存放在部门目录的子目录下),那么这个脚本就得重写.但如果使用波浪号展开,就能避免重写的情况:
printf “enter username : ”
read user
vi /home/$user/.profile 编辑该用户的.profile文件
这样一来,无论用户的根目录在哪里,程序都能正常运行了.
使用通配符
寻找文件名里的特殊字符,也是shell提供的服务之一.
基本的通配符 |
|
通配符 |
匹配 |
* |
任何的字符串字符 |
[set] |
任何在set里的字符 |
[!set] |
任何不在set里的字符 |
? |
任何的单一字符 |
?通配符匹配于任何的单一字符,所以如果你的目录里含有demo.a,demo.b,demo.txt这三个文件,与表达式demo.?匹配为demo.a,demo.b,但是demo.txt则不匹配.
星号(*)是一个功能强大的且广为使用的通配符;它匹配于任何字符组成的字符串.使用表达式demo.*会匹配前面说的三个文件;网页设计人员也可以用*.html表达式匹配他们的输入文件.
set结构是一组组字符列表(例如abc),一段内含的范围(如a-z),或者是两者的结合.如果希望破折号也是列表的一部分,只要把它放在第一个或最后一个就可以了.
使用set结构的通配符 |
|
表达式 |
匹配的单一字符 |
[abc] |
a,b或c |
[.,;] |
句号,逗号,或分号 |
[-_] |
破折号或下划线 |
[a-c] |
a,b或c |
[a-z] |
任意一个小写字母 |
[!0-9] |
任意一个非数字字符 |
[0-9!] |
任意一个数字会感叹号 |
[a-zA-Z] |
任意一个大写或小写字母 |
[a-zA-Z0_9_-] |
任何一个字母,任何一个数字,下划线或破折号 |
在原来的通配符返利中,demo.[ab]与demo.[a-z]两者都匹配demo.a和demo.b,但是demo.txt则不匹配.
在左方括号之后的感叹号用来”否定”一个set.例如[!.;]符合句号和分号以外的任何一个字符;[!a-zA-Z]符合任何一个非字母的字符.
范围表示法固然方便,但不应该对包含在范围内的字符有太多的假设.比较安全的方式是:分别指定所有大写字母,小写字母,数字,或任意的子范围(例如[f-q].[2-6]).不要想在标点符号字符上指定范围,或是在混用字母大小写上使用,像[a-Z]与[A-z]这样的用法,都不能保证一定能确切的匹配出包括所有想要的字母,而没有其他不想要的字符.更大的问题是在于:这样的范围在不同的类型之间的计算机之间无法提供完全的可移植性.
另一个问题是:很多国家默认的系统语言环境与纯粹的ASCII的字符集是不同的.为了解决这个问题,POSIX标准提出了方括号表达式,用来表示字母,数字,标点符号以及其他类型的字符,并且具有可移植性.在正则表达式下的方括号表达式里也出现相同的元素,它们可被用在兼容POSIX的shell内的shell通配符模式中,不过应该尽量避免将其应用在需可移植的shell脚本里.
习惯上,当执行通配符展开时,linux shell会忽略文件名开头为一个点号的文件.像这样的”点号文件”通常用做程序配置文件或启动文件(一般都隐藏起来了,需要使用 ls -a来查看).像是shell的$HOME/.profile,ex/vi编辑器的$HOME/.exrc,以及bash与gdb使用的GNU readline程序库的$HOME/.inputrc.
要看到这类文件,需要在模式前面明确的提供一个点号.例如:
echo .* 显示隐藏文件
注意:隐藏文件只是一个习惯用法.在用户层面的软件上他是这样的,但核心程序(kernel)并不认为开头带有一个点号的文件与其他文件有不同.
shell学习三十五天----波浪号展开与通配符相关推荐
- Linux的冒号和波浪号用法,shell 学习三十五天---波浪号展开与通配符
shell 学习三十五天---波浪号展开与通配符 shell 中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定 ...
- Java多线程学习三十五: CyclicBarrier 和 CountDownLatch 有什么不同
CyclicBarrier 和 CountDownLatch 有什么不同? CyclicBarrier作用 CyclicBarrier 和 CountDownLatch 确实有一定的相似性,它们都能阻 ...
- opencv学习(三十五)之仿射变换warpAffine
1.仿射变换介绍 仿射变换是指在向量空间中进行一次线性变换(乘以一个矩阵)并加上一个平移(加上一个向量),变换为另一个向量空间的过程.在有限维的情况下,每个仿射变换可以由一个矩阵A和一个向量b给出,它 ...
- Tensorflow实战学习(三十五)【实现基于LSTM语言模型】
神经结构进步.GPU深度学习训练效率突破.RNN,时间序列数据有效,每个神经元通过内部组件保存输入信息. 卷积神经网络,图像分类,无法对视频每帧图像发生事情关联分析,无法利用前帧图像信息.RNN最大特 ...
- shell学习三十四天----printf详解
http://blog.csdn.net/shanyongxu/article/details/46744055
- JavaScript学习(三十五)—拖动元素
JavaScript学习(三十五)-拖动元素 代码如下: <!DOCTYPE html> <html lang="en"><head><m ...
- Java学习笔记(三十五)
在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度.现在将跟着视频做的笔记进行整理.本篇博客是整理Java知识点的第三十五 ...
- LINUX学习基础篇(三十五)日志管理
LINUX学习基础篇(三十五)日志管理 日志管理 系统中常见的日志文件 日志文件格式 rsyslogd服务的配置文件 日志轮替 logrotate配置文件 配置文件夹 /etc/logrotate.d ...
- Slicer学习笔记(三十五)slicer学习链接
Slicer学习笔记(三十五)slicer学习链接 使用方面: 坐标系:https://www.slicer.org/wiki/Coordinate_systems 模块:https://slicer ...
最新文章
- ubuntu访问win7
- Windows Live Writer连接sharePoint博客时,有一个权限相关的BUG
- abap 导入队列末尾_在C#中将对象添加到队列的末尾-排队操作
- 【转】禁用Chrome和Firefox中自动播放的动画GIF
- 苹果保修期_iPhone 保修期内哪些情况可以获得免费维修?
- 计算机里的e盘 不能应用,我的电脑里的e盘打不开是怎么回事
- 计算机操作系统|汤小丹|第四版|习题答案(七)
- 介绍identity matrices
- 如何使用并且使用过滤器
- pcb元器件通孔焊盘激光焊锡的优势
- 小程序实现地图导航功能
- WinCC在C脚本创建电子签名对话框
- 链表的特点,单链表的定义、存储结构,单链表的基本操作(判断链表是否为空、销毁链表、清空链表、求链表表长、查找、插入、删除,建立单链表)
- 暑期项目实训——08
- 知识蒸馏系列(一):三类基础蒸馏算法
- 基于web的科研项目管理系统设计与实现
- UEFI开发历程1—edk2开发环境的搭建以及在虚拟机QEMU运行OVMF固件
- 科普-牛顿第二定律的矢量形式
- Python做数据分析需要学什么?
- 软件修改了hosts文件意味着什么?
热门文章
- 在Windows系统中通过简单代码实现一键截图功能
- 计算机网络纳新水粉画,快乐水粉画记录-淮南查查网 - Powered by Discuz!
- Pip给指定版本的Python安装模块
- 冰蝎Java WebShell免杀生成 -- ByPassBehinder4J​
- 多米尼加共和国商标注册
- vue 跨域图片下载
- 优漫动游:UI设计是什么?和平面设计有什么区别?
- GY906 温度的传感器
- activitythread.java,Android ActivityThread.reportSizeConfigurations导致应...
- 林地府邸java什么版本_我的世界1.11林地府邸介绍 关于林地府邸的资料攻略