Linux中通配符与正则表达式

来源:互联网 发布:vb.net 调用水晶报表 编辑:程序博客网 时间:2024/05/17 18:24

通配符用于Linux的shell命令(如文件名相关操作)中,而正则表达式用于文本内容中的字符串搜索和替换等。通配符是Linux系统本身就支持的,而正则表达式用于vim编辑器或awk程序,这些文本处理工具正是由于支持正则表达式才变得强大。

一、通配符

符号  意义

*   代表『 0 个到无穷多个』任意字符
?   代表『一定有一个』任意字符
[ ] 同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』
[ - ] 若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到9 之间的所有数字,因为数字的语系编码是连续的!
[^ ] 若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。

 

范例一:找出 /etc/ 底下以 cron 为开头的文件
[root@www ~]# ll -d /etc/cron*    <==加上 -d 是为了仅显示目录而已


范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名
[root@www ~]# ll -d /etc/?????    <==由于 ? 一定有一个,所以五个 ? 就对了


范例三:找出 /etc/ 底下文件名含有数字的文件名
[root@www ~]# ll -d /etc/*[0-9]*  <==记得中括号左右两边均需 *


范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:
[root@www ~]# ll -d /etc/[^a-z]*  <==注意中括号左边没有 *


范例五:将范例四找到的文件复制到 /tmp 中
[root@www ~]# cp -a /etc/[^a-z]* /tmp

 

二、特殊符号

符号  内容
批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不执行
\   跳脱符号(转义字符):将『特殊字符或通配符』还原成一般字符
|   管线 (pipe):分割两个管线命令的界定
连续指令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)
~   用户的家目录
$   取用变数前导符:亦即是变量之前需要加的变量取代值
&   工作控控制(job control):将指令变成背景下工作
!   逻辑运算意义上的『非』 not 的意思!
/   目录符号:路径分割的符号
>, >>   数据流重导向:输出导向,分别是『取代』与『累加』
<, <<   数据流重导向:输入导向 
' '   单引号,不具有变量置换的功能
" "   具有变量置换的功能! 

` `   (反引号)两个『 ` 』中间为可以先执行的指令,亦可使用 $( )
( )   在中间为子 shell 的起始和结束
{ }   在中间为命令区块的组合!

 

 

三、正则表达式

RE 字符  意义与范例
1、^word
意义:待搜寻的字符串(word)在行首!
范例:搜寻行首为 # 开始的那一行,并列出行号 
grep -n '^#' regular_express.txt


2、word$
意义:待搜寻的字符串(word)在行尾!
范例:将行尾为 ! 的那一行打印出来,并列出行号 
grep -n '!$' regular_express.txt
3、.
意义:代表『一定有一个任意字符』的字符!
范例:搜寻的字符串可以是 (eve) (eae) (eee)(e e), 但不能仅有 (ee) !亦即 e和 e 中间『一定』仅有一个字符,而空格符也是字符! 
grep -n 'e.e' regular_express.txt
4、\
意义:跳脱字符,将特殊符号的特殊意义去除!
范例:搜寻含有单引号 ' 的那一行! 
grep -n \' regular_express.txt
5、*
意义:重复零个到无穷多个的前一个 RE 字符
范例:找出含有 (es) (ess) (esss)等等的字符串,注意,因为 * 可以是 0 个,所以es 也是符合带搜寻字符串。另外,因为 *为重复『前一个 RE 字符』的符号, 因此,在 * 之前必须要紧接着一个 RE 字符!例如任意字符则为 『.*』 ! 
grep -n 'ess*' regular_express.txt
6、[list]
意义:字符集合的 RE 字符,里面列出想要搜索的字符!
范例:搜寻含有 (gl) 或 (gd) 的那一行,需要特别留意的是,在 [ ] 当中『仅代表一个待搜寻的字符』, 例如『 a[afl]y 』代表搜寻的字符串可以是 aay, afy, aly 即[afl] 代表 a 或 f 或 l 的意思! 
grep -n 'g[ld]' regular_express.txt
7、[n1-n2]
意义:字符集合的 RE 字符,里面列出想要搜索的字符范围!
范例:搜寻含有任意数字的那一行!需特别留意,在字符集合 [ ] 中的减号 - 是有特殊意义的,他代表两个字符之间的所有连续字符!例如所有大写字符则为 [A-Z] 
grep -n '[0-9]' regular_express.txt
8、[^list]
意义:字符集合的 RE 字符,里面列出不要的字符串或范围!
范例:搜寻的字符串可以是 (oog) (ood) 但不能是 (oot) ,那个 ^ 在 [ ] 内时,代表的意义是『反向选择』的意思。 例如,我不要大写字符,则为 [^A-Z]。但是,需要特别注意的是,如果以 grep -n [^A-Z]regular_express.txt 搜寻,却发现该档案内的所有行都被列出,为什么?因为这个 [^A-Z] 是『非大写字符』的意思, 因为每一行均有非大写字符,例如第一行的 "Open Source" 就有p,e,n,o.... 等等的小写字 
grep -n 'oo[^t]' regular_express.txt
9、\{n,m\}
意义:连续 n 到 m 个的『前一个 RE 字符』
意义:若为 \{n\} 则是连续 n 个的前一个 RE 字符, 意义:若是 \{n,\} 则是连续 n 个以上的前一个 RE 字符! 范例:在 g 到 g 之间有2 个到 3 个的 o 存在的字符串,亦即 (goog)(gooog) 
grep -n 'go\{2,3\}g' regular_express.txt

 

 


0 0
原创粉丝点击