shell浅谈之正则表达式
来源:互联网 发布:虎头牌猎枪淘宝网 编辑:程序博客网 时间:2024/04/30 07:36
一、简介
Shell中很多工具和命令普遍使用到了正则表达式,了解基本的正则表达式和扩展正则表达式中元字符的意义和用法对熟练使用Shell编程很有好处。
正则表达式RE(Regular Expression)是由一串字符和元字符构成的字符串,主要功能是文本查询和字符串操作,它可以匹配文本的一个字符或字符集合。用于数据流处理完成数据过滤 。
二、详解
POSIX分为基本的正则表达式和扩展的正则表达式,linux都支持基本的正则表达式。
1、基本正则表达式
(1)正则表达式的基本元素包括普通字符和元字符,如a、b、1等属于普通字符。而*、^、[]等元字符赋予了特殊的意义。
(2)方括号[]匹配字符集合,可以使用"-"表示字符集合范围(从"-"左边字符开始到"-"右边字符结束)。linux系统大小写敏感并且支持字母排序。
(3)"^"符号表示匹配行首,但“^”符号放到"[]"中就不再表示匹配行首了而是取反符号,例[^b-d]表示不在b~d范围内的所有字符(即包括其他字母、数字、空格等)。[A-Za-z][A-Za-z]*匹配任意英文单词。
(4)"\<\>"符号是精确匹配符号,如\<the\>精确匹配the单词,不匹配包括the字符的单词如them、there。
(5)"\{\}"系列符号可以指定重复次数("*"符号只能表示重复0次或任意次)。
2、扩展正则表达式
awk和perl等linux工具还支持正则表达式扩展出来的一些元字符。(1)"?"至多可以匹配1个字符。"+"至少匹配一次。"*"可以匹配0次和多次。
(2)"("通常与"|"结合表示一组可选字符的集合。但"()"符号很少使用,因为"[]"完全能够代替"()"表示一组可选字符的集合。re(a|e|o)d就等价于re[aeo]d。
3、通配
(1)Bash shell本身不支持正则表达式,使用正则表达式的是Shell命令和工具如gerp、sed、awk等。但shell可以使用正则表达式中的一些元字符实现通配功能,最常用的通配符包括正则表达式元字符:?、*、[]、{}、^等,它们的意思和正则表达式中的意义不完全一致。*符号不再表示其前面的字符的重复,而是表示任意位的任意字符。?字符表示一个任意字符。^符号在通配中不代表行首,而是代表取反。
(2)ls列出以a~h开头且不是以.txt结尾的文件,通配为[a-h]*.[^txt]*。"^"表示取反,"[]"符号的意义与正则表达式中的意义一样。
(3)正则表达式中只有在花括号前加上转义符的用法,即\{\}用于限制匹配字符的个数;而通配中{}符号表示一组表达式的集合例如{[a-h]*.txt, a?.log}表示满足[a-h]*.txt或a?.log的所有文件,{}内的表达式是或的关系。
(4)内部变量GLOBIGNORE保存了通配时所忽略的文件名集合,?、*、[]、{}、^五个符号和GLOBIGNORE变量构成了shell通配的所有内容。
(5)通配需搜索大量的文件或目录进行匹配而输出,对cpu和内存要求较高,黑客输入包含通配符的文件名故意让服务器重复和连续不断地进行通配可能引起拒绝服务攻击,因此服务器都限制执行通配功能的次数、限制一个用户每次输入的通配符。
- shell浅谈之正则表达式
- shell浅谈之四正则表达式
- shell浅谈之四正则表达式
- shell之正则表达式
- shell之正则表达式
- shell编程之正则表达式
- Shell基础之-正则表达式
- shell编程之正则表达式
- 【Linux】shell之正则表达式
- Shell编程之正则表达式
- shell编程之正则表达式
- shell 编程之正则表达式
- shell编程之正则表达式
- shell 编程(一)之 正则表达式
- shell基础学习之正则表达式
- shell之文本过滤(正则表达式)
- shell编程之正则表达式基础
- Linux Shell笔记之正则表达式
- codeforces 113 B Petr# (一道用了函数就会的题)
- 中国象棋将帅问题
- shell浅谈之文本处理工具Vim
- GUI基本控件(一)
- hdoj 2028 Lowest Common Multiple Plus
- shell浅谈之正则表达式
- C#访问和操作MYSQL数据库
- Hadoop第一天---初识Hadoop
- shell浅谈之三for、while、until循环
- GUI:图形用户界面 1、方法:void OnGUI(){} 2、标签 GUI.Lable(new Rect(left,top,witch,100),str); 3、文本输入域:s
- HTML文字特效
- 2015年的物联网与智慧产业:忍不住的预测
- SSH ehcache二级缓存配置
- mono ios莫名其妙闪退的解决方法