当前位置: 首页 > news >正文

网站你懂我意思正能量晚上不用下载济南网站开发招聘

网站你懂我意思正能量晚上不用下载,济南网站开发招聘,潍坊网站排名,分类网站模板Linux命令行与Shell脚本编程 第十九章 正则表达式 文章目录 Linux命令行与Shell脚本编程 第十九章 正则表达式九.正则表达式9.1.正则表达式基础9.1.1.正则表达式的类型9.2.定义BRE模式9.2.1.普通文本9.2.2.特殊字符 9.2.3.锚点字符锚定行首^锚定行尾$组合锚点 9.2.4.点号字符\.…Linux命令行与Shell脚本编程 第十九章 正则表达式 文章目录 Linux命令行与Shell脚本编程 第十九章 正则表达式九.正则表达式9.1.正则表达式基础9.1.1.正则表达式的类型9.2.定义BRE模式9.2.1.普通文本9.2.2.特殊字符 9.2.3.锚点字符锚定行首^锚定行尾$组合锚点 9.2.4.点号字符\.9.2.5.字符组[]9.2.6.排除字符组8.2.7.区间9.2.8.特殊字符组9.2.9.星号* 9.3.扩展正则表达式9.3.1.问号?9.3.2.加号9.3.3.花括号\{\}9.3.4.竖线符号\|9.3.5.表达式分组 9.4.实战9.4.1.目录文件计数 九.正则表达式 正则表达式基础定义BRE模式扩展正则表达式 在sed和gawk中创建正则表达式以得到所需的数据。 9.1.正则表达式基础 正则表达式是一种可供Linux工具过滤文本的自定义模板,使用元字符来描述数据流中的一个或多个字符. Linux工具比如sed或gawk会在读取数据时使用正则表达式对数据进行模式匹配。如果数据匹配模式它就会被接受并进行处理。 正则表达式包含文本和/或特殊字符. 9.1.1.正则表达式的类型 不同的应用程序可能使用不同类型的正则表达式。 编程语言Java、Python、Linux工具sed、gawk和grep以及主流应用程序MySQL数据库服务器。 正则表达式由正则表达式引擎实现。这种底层软件负责解释正则表达式并用这些模式进行文本匹配。 Linux 中流行的两种: POSIX基础正则表达式basic regular expressionBRE引擎。POSIX扩展正则表达式extended regular expressionERE引擎。 大多数Linux工具至少符合POSIX BRE引擎规范。但有些工具比如sed仅符合BRE引擎规范的一个子集。 (出于速度方面的考虑导致,sed希望尽可能快地处理数据流中的文本) POSIX ERE引擎多见于依赖正则表达式过滤文本的编程语言中。为常见模式比如数字、单词以及字母或数字字符提供了高级模式符号和特殊符号。 gawk就是使用ERE引擎来处理正则表达式。 9.2.定义BRE模式 最基本的BRE模式是匹配数据流中的文本字符. 9.2.1.普通文本 正则表达式对大小写敏感. 正则表达式并不关心模式在数据流中出现的位置也不在意模式出现了多少次。 只要能匹配文本字符串中任意位置的模式正则表达式就会将该字符串传回Linux工具。 在正则表达式中空格和其他的字符没有区别.如果在正则表达式中定义了空格那么必须出现在数据流中。甚至可以创建匹配多个连续空格的正则表达式. $ cat data1 This is a normal line of text. This is a line with too many spaces. $ sed -n / /p data1 This is a line with too many spaces.9.2.2.特殊字符 正则表达式中的一些字符具有特别的含义: .*[]^${}\?|() 不能在匹配普通文本的模式中单独使用这些字符. 如果要将某个特殊字符视为普通字符则必须将其转义.使用特殊转移字符反斜线\。 尽管正斜线 / 不属于正则表达式的特殊字符但如果出现在sed或gawk的正则表达式中就会出现错误,所以正斜线也需要进行转义. 9.2.3.锚点字符 默认情况下当指定一个正则表达式模式时只要模式出现在数据流中的任何地方它就能匹配.有两个特殊字符可以用来将模式锁定在数据流中的行首或行尾。 锚定行首^ 脱字符^可以指定位于数据流中文本行行首的模式。如果模式出现在行首之外的位置则正则表达式无法匹配。 使用脱字符就必须将其置于正则表达式之前 $ echo The book store | sed -n /^book/p $ $ echo Books are great | sed -n /^Book/p Books are great如果将脱字符放到正则表达式开头之外的位置那么就跟普通字符一样没有特殊含义 $ echo This ^ is a test | sed -n /s ^/p This ^ is a test如果正则表达式模式中只有脱字符就不必用反斜线来转义。但如果在正则表达式中先指定脱字符随后还有其他文本就必须在脱字符前用转义字符. $ echo This is ^ a test | sed -n /^ a test/p $ echo This is ^ a test | sed -n /\^ a test/p This is ^ a test锚定行尾$ 与在行首查找模式相反的情况是在行尾查找。特殊字符美元符号$定义了行尾锚点。将这个特殊字符放在正则表达式之后则表示数据行必须以该模式结尾. $ echo This is a good book | sed -n /book$/p This is a good book组合锚点 组合使用行首锚点和行尾锚点。 $ cat data4 this is a test of using both anchors I said this is a test this is a test Im sure this is a test. $ sed -n /^this is a test$/p data4 this is a test将这两个锚点直接组合之间不加任何文本可以过滤掉数据流中的空行。 组合 删除命令d就可以删除掉文本中的空行. $ cat data5 This is one test line.This is another test line. $ sed /^$/d data5 This is one test line. This is another test line.9.2.4.点号字符. 点号字符可以匹配除换行符之外的任意单个字符。(空格也是字符,可以匹配) 点号字符必须匹配一个字符如果在点号字符的位置没有可匹配的字符那么模式不成立。 $ cat data6 This is a test of a line. The cat is sleeping. That is a very nice hat. This test is at line four. at ten oclock well go home. $ sed -n /.at/p data6 The cat is sleeping. That is a very nice hat. This test is at line four.9.2.5.字符组[] 想要限定要匹配的具体字符使用字符组. 可以在正则表达式中定义用来匹配某个位置的一组字符。如果字符组中的某个字符出现在了数据流中那就能匹配该模式。 方括号 [] 用于定义字符组。 在不太确定某个字符的大小写时非常适合使用字符组. $ echo Yes | sed -n /[Yy]es/p Yes $ echo yes | sed -n /[Yy]es/p yes在一个正则表达式中可以使用多个字符组. 可以将多个字符组组合在一起以检查数字是否具备正确的格式. $ cat data8 60633 46201 223001 4353 22203 $ sed -n /^[0123456789][0123456789][0123456789][0123456789][0123456789]$/pdata8 60633 46201 222039.2.6.排除字符组 在正则表达式中可以反转字符组的作用匹配字符组中没有的字符。在字符组的开头添加脱字符^ $ sed -n /[^ch]at/p data6 This test is at line four.即使是排除型字符组仍必须匹配一个字符以at为起始的行还是不能匹配模式!!! 8.2.7.区间 可以用单连字符在字符组中表示字符区间。只需指定区间的第一个字符、连字符以及区间的最后一个字符。 根据Linux系统使用的字符集字符组会包括在此区间内的任意字符。 $ sed -n /^[0-9][0-9][0-9][0-9][0-9]$/p data8 60633 46201 45902同样的方法也适用于字母: $ sed -n /[c-h]at/p data6 The cat is sleeping. That is a very nice hat.可以在单个字符组内指定多个不连续的区间: $ sed -n /[a-ch-m]at/p data6 The cat is sleeping. That is a very nice hat.9.2.8.特殊字符组 BRE还提供了一些特殊的字符组,用来匹配特定类型的字符。 字符组描述[[:alpha:]]匹配任意字母字符,无论大小写[[:alnum:]]匹配任意字母和数组字符,0-9、a-z、A-Z[[:blank:]]匹配空格和制表符[[:digit:]]匹配0-9的数字[[:lower:]]匹配a-z的字母[[:upper:]]匹配A-Z的字母[[:print:]]匹配任意可打印字符[[:punct:]]匹配标点符号[[:space:]]匹配任意空白字符:空格、制表符、换行符、分页符、垂直制表符、回车符 特殊字符组在正则表达式中的用法和普通字符组一样 $ echo abc | sed -n /[[:digit:]]/p $ echo abc | sed -n /[[:alpha:]]/p abc $ echo abc123 | sed -n /[[:digit:]]/p abc123 $ echo This is a test | sed -n /[[:punct:]]/p $ echo This is, a test | sed -n /[[:punct:]]/p This is, a test9.2.9.星号* 在字符后面放置星号,表明该字符必须在匹配模式的文本中出现0次或多次. $ echo ik | sed -n /ie*k/p ik $ echo iek | sed -n /ie*k/p iek $ echo ieek | sed -n /ie*k/p ieek $ echo ieeek | sed -n /ie*k/p ieeek $ echo ieeeek | sed -n /ie*k/p ieeeek某些单词在英美中不同,借助 星号可以匹配: $ echo Im getting a color TV | sed -n /colou*r/p Im getting a color TV $ echo Im getting a colour TV | sed -n /colou*r/p Im getting a colour TV $将点号字符和星号字符组合起来。这个组合能够匹配任意数量的任意字符: $ echo this is a regular pattern expression | sed -n /regular.*expression/p this is a regular pattern expression星号用于字符组时指定可能在文本中出现0次或多次的字符组或字符区间 $ echo bt | sed -n /b[ae]*t/p bt baaeeet $ echo baeeaeeat | sed -n /b[ae]*t/p baeeaeeat $ echo baakeeet | sed -n /b[ae]*t/p9.3.扩展正则表达式 POSIX ERE模式提供了一些可供Linux应用程序和工具使用的额外符号。gawk支持ERE模式,sed不支持。 可用于gawk脚本中的常见ERE模式符号。 9.3.1.问号? 问号表明字符可以出现0次或1次,不会匹配多次出现的该字符.用法与星号类似,可以作用与字符组. $ echo bt | gawk /be?t/{print $0} bt $ echo bet | gawk /be?t/{print $0} bet $ echo beet | gawk /be?t/{print $0}9.3.2.加号 加号表明前面的字符可以出现1次或多次必须至少出现1次。用法与星号类似,可以作用与字符组. $ echo bt | gawk /b[ae]t/{print $0} $ $ echo bat | gawk /b[ae]t/{print $0} bat $ echo bet | gawk /b[ae]t/{print $0} bet $ echo beat | gawk /b[ae]t/{print $0} beat $ echo beet | gawk /b[ae]t/{print $0} beet $ echo beeat | gawk /b[ae]t/{print $0} beeat9.3.3.花括号{} ERE中的花括号允许为正则表达式指定具体的可重复次数称为区间。 可以用两种格式来指定区间: m正则表达式恰好出现m次。m, n正则表达式至少出现m次至多出现n次。 默认情况下gawk也不识别正则表达式区间必须指定gawk的命令行选项–re-interval。 $ echo bt | gawk --re-interval /be{1}t/{print $0} $ $ echo bet | gawk --re-interval /be{1}t/{print $0} bet $ echo beet | gawk --re-interval /be{1}t/{print $0} $ $ echo bt | gawk --re-interval /be{1,2}t/{print $0} $ $ echo bet | gawk --re-interval /be{1,2}t/{print $0} bet $ echo beet | gawk --re-interval /be{1,2}t/{print $0} beet $ echo beeet | gawk --re-interval /be{1,2}t/{print $0} $ $ echo bt | gawk --re-interval /b[ae]{1,2}t/{print $0} $ $ echo beet | gawk --re-interval /b[ae]{1,2}t/{print $0} beet $ echo beeat | gawk --re-interval /b[ae]{1,2}t/{print $0} $9.3.4.竖线符号| 竖线符号允许在检查数据流时以逻辑OR方式指定正则表达式引擎要使用的两个或多个模式。任何一个模式匹配了数据流文本就视为匹配。 竖线符号两侧的子表达式可以采用正则表达式可用的任何模式符号包括字符组 $ echo The cat is asleep | gawk /cat|dog/{print $0} The cat is asleep $ echo The dog is asleep | gawk /cat|dog/{print $0} The dog is asleep $ echo The sheep is asleep | gawk /cat|dog/{print $0}9.3.5.表达式分组 用圆括号对正则表达式进行分组。分组之后每一组会被视为一个整体可以像对普通字符一样对该组应用特殊字符。 $ echo Sat | gawk /Sat(urday)/{print $0} $ echo Saturday | gawk /Sat(urday)/{print $0} Saturday将分组和竖线符号结合起来创建可选的模式匹配组: $ echo cat | gawk /(c|b)a(b|t)/{print $0} cat $ echo cab | gawk /(c|b)a(b|t)/{print $0} cab $ echo bat | gawk /(c|b)a(b|t)/{print $0} bat $ echo bab | gawk /(c|b)a(b|t)/{print $0} bab $ echo tab | gawk /(c|b)a(b|t)/{print $0} $9.4.实战 9.4.1.目录文件计数 对PATH环境变量中各个目录所包含的文件数量进行统计. PATH中的各个路径由冒号分隔。要获取可在脚本中使用的目录列表须用空格替换冒号. $ echo $PATH | sed s/:/ /g /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games分离出目录之后可以使用标准for语句遍历每个目录: mypathecho $PATH | sed s/:/ /g for directory in $mypath do ... done对于单个目录可以用ls命令列出其中的文件再用另一个for语句来遍历每个文件对文件计数器增值。 $ cat countfiles #!/bin/bash # count number of files in your PATH mypath$(echo $PATH | sed s/:/ /g) count0 for directory in $mypath docheck$(ls $directory)for item in $checkdocount$[ $count 1 ]doneecho $directory - $countcount0 done $ ./countfiles /usr/local/sbin - 0 /usr/local/bin - 2 /usr/sbin - 213 /usr/bin - 1427 ... /usr/local/games - 0
http://www.laogonggong.com/news/127838.html

相关文章:

  • 网站信息安全监测建设方案php做网站搜索框
  • 静态网站建设教程自己做网站 服务器
  • 建设通网站官网网站工信部备案号
  • 四川城乡建设网站企业网站优化分为
  • 地税局网站怎么做变更北京网络营销哪里实惠
  • 网站服务器空间选择旅游网站开发的意义相关资料
  • 吉林市做网站公司有没有什么东西可以做网站
  • 自己做网站开网店我要自学网下载
  • 地方门户网站建站流程深圳网站建设公司哪家可以建app
  • 襄阳做网站公司哪家好wordpress子页面密码错误
  • 网站建设制作设计seo优化南宁wordpress header js
  • 自己搭建服务器网站开发软件哪个公司的微信商城系统
  • 网站实名审核多久字体为什么在wordpress
  • 青州市城乡建设局网站湖南益阳
  • aspmysql做网站做网站要会哪些软件
  • 免费网站建设是什么wordpress与dedecms
  • 推荐一个免费的网站临时工200一天一结
  • html网站首页设计个人网站注册什么域名
  • 通辽市城乡建设局网站栾城网站建设
  • 集宁建设局网站网络营销咨询公司
  • 济南金融行业网站开发网站建设购买数据库的流程图
  • 网站建设方案实验报告个人虚拟机做网站
  • 模板板网站大连网站制作开发
  • 遵义网站建设方案广东省级建设主管部门网站
  • 网站数字签名网站做弹窗广告吗
  • 食品公司网站建设竞价托管哪家效果好
  • 做视频网站 买带宽番禺外贸网站建设
  • 海康域名网站网站美工设计收费
  • 衡水网站推广的网络公司专业的上海网站建设
  • 备案期间怎么关闭网站wordpress如何go转