Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1366766
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类:

2009-01-17 12:40:02

万用字元与特殊符号:
嘿嘿!在 bash 里头还支援一些万用字元喔 (wild card) !多了这些万用字元, 我们利用 bash 处理资料就更方便了!底下我们列出一些常用的万用字元喔:

符号    内容
*    万用字元,代表 0 个或多个字元(或数字)
?    万用字元,代表‘一定有’一个字母
#    注解,这个最常被使用在 script 当中,视为说明!
\    跳脱符号,将‘特殊字元或万用字元’还原成一般字元
|    分隔两个管线命令的界定;
;    连续性命令的界定(注意!与管线命令并不相同)
~    使用者的家目录
$    亦即是变数之前需要加的变数取代值
&    将指令变成背景下工作
!    逻辑运算意义上的‘非’ not 的意思!
/    路径分隔的符号
>, >>    输出导向,分别是‘取代’与‘累加’
'    单引号,不具有变数置换的功能
"    具有变数置换的功能!
` `    两个‘ ` ’中间为可以先执行的指令!
( )    在中间为子 shell 的起始与结束
[ ]    在中间为字元的组合
{ }    在中间为命令区块的组合!
组合按键    执行结果
Ctrl + C    终止目前的命令
Ctrl + D    输入结束(EOF),例如邮件结束的时候;
Ctrl + M    就是 Enter 啦!
Ctrl + S    暂停萤幕的输出
Ctrl + Q    恢复萤幕的输出
Ctrl + U    在提示字元下,将整列命令删除
Ctrl + Z    ‘暂停’目前的命令

在上面的‘按键组合’当中,有没有发现跟上个小节很相似的内容啊!? 呵呵~没错啦!那些组合键都可以在 stty 当中来进行不同的设定的!好玩吧! 至于上面的万用字元当中,最常用的就属 *, ?, [] 及 ` 了!我们提几个简单的例子:

[root@linux ~]# ls test*      <==那个 * 代表后面不论接几个字元都予以接受
[root@linux ~]# ls test?      <==那个 ? 代表后面‘一定’要接‘一个’字元
[root@linux ~]# ls test???    <==那个 ??? 代表‘一定要接三个’字元!
[root@linux ~]# cp test[1-5] /tmp
# 将 test1, test2, test3, test4, test5 若存在的话,就拷贝到 /tmp
[root@linux ~]# cp test[!1-5] /tmp
# 只要不是 test1, test2, test3, test4, test5 之外的其他 test? ,
# 若存在的话,就拷贝到 /tmp
[root@linux ~]# cd /lib/modules/`uname -r`/kernel/drivers
# 被 ` ` 括起来的内容‘会先执行’(先执行uname -r 再执行
cd /lib/modules/`uname -r`/kernel/drivers

上面几个例子相当的有趣!尤其是最后面两个!需要注意的是, [1-5] 里面‘代表只有一个字元’但是范围可以由 1-5 ,这样来说的话,那么我们如果允许‘只要档名里面含有至少一个大写字元’时,就可以将档案 copy 出来的话,可以这样做:

      cp *[A-Z]* /tmp

很有趣吧?!也就是说‘ [ ] 谨代表一个字元,而这个字元的定义可以是范围(-), 可以是指定项目,也可以是两者并存。 ’举例来说,我想要找出在 /etc/ 底下所有含有数字的档案, 可以这样:

      ls -lda /etc/*[0-9]*

但如果我只想要找出含有 3 及 5 的档名的档案呢?就会是这样:

      ls -lda /etc/*[35]*

如果是‘不想要’某些范围或者是单字呢?就使用 [!] 即可!例如不想要有小写字元为开头的档案:

      ls -lda /etc/[!a-z]*

很好玩吧!至于那个 ` 是啥?在一串指令当中, `command` 内的指令会先被执行, 执行完的讯息再回传到外部指令来处理!也就是说:

   1. 系统先执行 uname -r 找出输出的结果;
   2. 将结果累加在目录上面,来执行 cd 的功能!

很棒吧!!另外,这个 quot (`) 的功能,也可以利用 $() 来取代喔!例如:

      cd /lib/modules/$(uname -r)/kernel

这些基本的功能需要特别来瞭解一下才行呦!至于更多的使用方式, 我们会在后续的正规表示法当中在详谈的!
阅读(1667) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~