- 浏览: 2183824 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
上篇文章,散仙简单介绍了在linux中,使用sed和gawk编程的基础,本篇我们来复习下在正则表达式,当然不仅仅在我们的shell里面有正则,各个编程语言里面都有正则这一处理字符文本的神器。
在shell里面到处可见正则的身影:
在case语句里面,就充分使用了正则的表达式:
正则表达式是区分大小写和单复数的:
匹配空格:
在正则里面的转义用反斜杠\,一般会对特殊字符进行转义
下面看在正则里的锚字符:
^代表必须以某个字符开头:
$代表以某个字符结尾
如果以^开头以$结尾的表达式,代表必须匹配这样的模式,不能出现在字符串里的任意位置
.字符代表一个字符,必须匹配一个字符
下面看下字符组[],表示可以匹配方括号内的任意一个字符
排除字符组[^]:
当然我们也可以使用区间:
在shell里面还有一些特殊的字符组:
[[:alpha:]] 匹配任意字母字符,无论是大写还是小写
[[:alnum:]] 匹配任意字母数字字符0-9,a-Z,或a-z
[[:blank:]] 匹配空格或制表符
[[:digit:]] 匹配0-9之间的数字
[[:lower:]] 匹配小写字母字符a-z
[[:print:]] 匹配任意可打印字符
[[:punct:]] 匹配标点符号
[[:space:]] 匹配任意空白字符,空格,制表符,NL ,FF ,VT ,CR
[[:upper:]] 匹配任意大写字母字符A-Z
下面看下*号,表示0个到多个字符:
下面看下?号字符,代表0个或1个:
下面看下+号,表示字符必须出现一次:
下面看下如何使用大括号来控制范围:
{m}出现m次
{m,n}在一个m到n的范围内
{m,}至少出现m次
注意这个范围的m,n,比如[ae]{1,2},后面的n代表匹配的最大次数,最多能同时出现ae,
也可以使用|符号:
如果想匹配整个字符串,需要使用()标识整体:
下面看个小实站例子,目录文件计数:
至此,我们统计文件的小脚本就完成了,有兴趣的朋友,可以在linux里面尝试一下电话号码和邮箱的验证的正则的使用!
在shell里面到处可见正则的身影:
[search@h1 820]$ ll 总用量 0 -rw-rw-r-- 1 search search 0 8月 21 02:40 ab.txt -rw-rw-r-- 1 search search 0 8月 21 02:40 acb.txt -rw-rw-r-- 1 search search 0 8月 21 02:40 bacb.txt [search@h1 820]$ ls -al 总用量 8 drwxrwxr-x 2 search search 4096 8月 21 02:40 . drwx------. 16 search search 4096 8月 21 02:22 .. -rw-rw-r-- 1 search search 0 8月 21 02:40 ab.txt -rw-rw-r-- 1 search search 0 8月 21 02:40 acb.txt -rw-rw-r-- 1 search search 0 8月 21 02:40 bacb.txt [search@h1 820]$ ls -al a* -rw-rw-r-- 1 search search 0 8月 21 02:40 ab.txt -rw-rw-r-- 1 search search 0 8月 21 02:40 acb.txt [search@h1 820]$ ls -al ab* -rw-rw-r-- 1 search search 0 8月 21 02:40 ab.txt [search@h1 820]$
在case语句里面,就充分使用了正则的表达式:
[search@h1 820]$ cat 1.sh read -p "请输入一个字符: " answer case "$answer" in one|1) echo "你选择了1" ;; two|2) echo "你选择了2" ;; three|3) echo "你选择了3" ;; *) echo "你输入了其他" ;; esac time=`date` echo "结束: $time" [search@h1 820]$ sh 1.sh 请输入一个字符: one 你选择了1 结束: 2014年 08月 21日 星期四 02:49:55 CST [search@h1 820]$ sh 1.sh 请输入一个字符: 1 你选择了1 结束: 2014年 08月 21日 星期四 02:49:58 CST [search@h1 820]$ sh 1.sh 请输入一个字符: ll 你输入了其他 结束: 2014年 08月 21日 星期四 02:50:01 CST [search@h1 820]$
[search@h1 820]$ echo "this is a test" | sed -n '/test/p' this is a test [search@h1 820]$ echo "this is a test" | sed -n '/tesst/p' [search@h1 820]$ echo "this is a test" | gawk '/test/{print $0}' this is a test [search@h1 820]$ echo "this is a test" | gawk '/tesst/{print $0}' [search@h1 820]$
正则表达式是区分大小写和单复数的:
[search@h1 820]$ echo "Aa" | sed -n '/Aa/p' Aa [search@h1 820]$ echo "Aa" | sed -n '/AA/p' [search@h1 820]$
[search@h1 820]$ echo "my name is hadoop" | sed -n '/me/p' my name is hadoop [search@h1 820]$
匹配空格:
[search@h1 820]$ echo "my name is hadoop" | sed -n '/ /p' my name is hadoop [search@h1 820]$ echo "my name is hadoop" | sed -n '/ /p'
在正则里面的转义用反斜杠\,一般会对特殊字符进行转义
[search@h1 820]$ echo "3 / 2" | sed -n '/\//p' 3 / 2 [search@h1 820]$
下面看在正则里的锚字符:
[search@h1 820]$ echo "a book " | sed -n '/^a/p' a book [search@h1 820]$ echo "is is a book " | sed -n '/^a/p' [search@h1 820]$
^代表必须以某个字符开头:
[search@h1 820]$ echo "a book" | sed -n '/$k/p' [search@h1 820]$ echo "a book" | sed -n '/k$/p' a book [search@h1 820]$ echo "a book c" | sed -n '/k$/p' [search@h1 820]$
$代表以某个字符结尾
[search@h1 820]$ echo "a fish" | sed -n '/^a fish$/p' a fish [search@h1 820]$ echo "a b fish" | sed -n '/^a fish$/p' [search@h1 820]$
如果以^开头以$结尾的表达式,代表必须匹配这样的模式,不能出现在字符串里的任意位置
[search@h1 820]$ cat v.txt this is a test of line this cat is sleeping this ia a very nice hat this test is at line four [search@h1 820]$ sed -n '/.at/p' v.txt this cat is sleeping this ia a very nice hat this test is at line four [search@h1 820]$
.字符代表一个字符,必须匹配一个字符
下面看下字符组[],表示可以匹配方括号内的任意一个字符
[search@h1 820]$ echo "Yes" | sed -n '/[Yy]es/p' Yes [search@h1 820]$ echo "yes" | sed -n '/[Yy]es/p' yes [search@h1 820]$
排除字符组[^]:
[search@h1 820]$ cat b.txt cat hat hadoop oops gat mat yat [search@h1 820]$ sed -n '/[^hm]at/p' b.txt cat gat yat [search@h1 820]$
当然我们也可以使用区间:
[search@h1 820]$ echo "90" | sed -n '/[0-8]0/p' [search@h1 820]$ echo "90" | sed -n '/[0-9]0/p' 90 [search@h1 820]$
在shell里面还有一些特殊的字符组:
[[:alpha:]] 匹配任意字母字符,无论是大写还是小写
[[:alnum:]] 匹配任意字母数字字符0-9,a-Z,或a-z
[[:blank:]] 匹配空格或制表符
[[:digit:]] 匹配0-9之间的数字
[[:lower:]] 匹配小写字母字符a-z
[[:print:]] 匹配任意可打印字符
[[:punct:]] 匹配标点符号
[[:space:]] 匹配任意空白字符,空格,制表符,NL ,FF ,VT ,CR
[[:upper:]] 匹配任意大写字母字符A-Z
[search@h1 820]$ echo "abc" sed -n '/[[:digit:]]/p' abc sed -n /[[:digit:]]/p [search@h1 820]$ echo "abc" | sed -n '/[[:digit:]]/p' [search@h1 820]$ echo "abc123" | sed -n '/[[:digit:]]/p' abc123 [search@h1 820]$
下面看下*号,表示0个到多个字符:
[search@h1 820]$ echo "ik" | sed -n '/ie*k/p' ik [search@h1 820]$ echo "ik" | sed -n '/iee*k/p' [search@h1 820]$ echo "iek" | sed -n '/iee*k/p' iek [search@h1 820]$
[search@h1 820]$ echo "bat" | sed -n '/b[ba]*t/p' bat [search@h1 820]$ echo "bt" | sed -n '/b[ba]*t/p' bt [search@h1 820]$ echo "bta" | sed -n '/b[ba]*t/p' bta [search@h1 820]$ echo "bta" | sed -n '/^b[ba]*t$/p' [search@h1 820]$
下面看下?号字符,代表0个或1个:
[search@h1 820]$ echo "bt" | gawk '/bt?/{print $0}' bt [search@h1 820]$ echo "btt" | gawk '/bt?/{print $0}' btt [search@h1 820]$ echo "btta" | gawk '/bt?/{print $0}'
下面看下+号,表示字符必须出现一次:
[search@h1 820]$ echo "bt" | gawk '/bt+/{print $0}' bt [search@h1 820]$ echo "bbt" | gawk '/bt+/{print $0}' bbt [search@h1 820]$ echo "bbz" | gawk '/bt+/{print $0}' [search@h1 820]$
下面看下如何使用大括号来控制范围:
{m}出现m次
{m,n}在一个m到n的范围内
{m,}至少出现m次
[search@h1 820]$ echo "bt" | gawk --re-interval '/be{1,2}/{ print $0}' [search@h1 820]$ echo "bet" | gawk --re-interval '/be{1,2}/{ print $0}' bet [search@h1 820]$ echo "beet" | gawk --re-interval '/be{1,2}/{ print $0}' beet [search@h1 820]$ echo "beeet" | gawk --re-interval '/be{1,2}/{ print $0}' beeet [search@h1 820]$
[search@h1 820]$ echo "bt" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' [search@h1 820]$ echo "bat" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' bat [search@h1 820]$ echo "bet" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' bet [search@h1 820]$ echo "baet" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' baet [search@h1 820]$ echo "baaet" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' [search@h1 820]$ echo "baet" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' baet [search@h1 820]$ echo "baeat" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' [search@h1 820]$ echo "bat" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' bat [search@h1 820]$ echo "bant" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' [search@h1 820]$ echo "baaeet" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' [search@h1 820]$ echo "baet" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' baet [search@h1 820]$ echo "baeaet" | gawk --re-interval '/b[ae]{1,2}t/{ print $0 }' [search@h1 820]$ echo "baeaet" | gawk --re-interval '/b[ae]{1,4}t/{ print $0 }' baeaet [search@h1 820]$ echo "baeaet" | gawk --re-interval '/b[ae]{1,3}t/{ print $0 }' [search@h1 820]$
注意这个范围的m,n,比如[ae]{1,2},后面的n代表匹配的最大次数,最多能同时出现ae,
也可以使用|符号:
[search@h1 820]$ echo "this is a dog" | gawk '/cat|dog/ { print $0 }' this is a dog [search@h1 820]$ echo "this is a ddog" | gawk '/cat|dog/ { print $0 }' this is a ddog [search@h1 820]$ echo "this is a ddoxg" | gawk '/cat|dog/ { print $0 }' [search@h1 820]$ echo "this is a cat" | gawk '/cat|dog/ { print $0 }' this is a cat [search@h1 820]$
如果想匹配整个字符串,需要使用()标识整体:
[search@h1 820]$ echo "satabcd" | gawk '/sat(abc)?/ {print $1}' satabcd [search@h1 820]$
下面看个小实站例子,目录文件计数:
[root@h1 ~]# cat count.sh mypath=`echo $PATH | sed 's/:/ /g'` echo $mypath count=0 for dir in $mypath do check=`ls $dir` for item in $check do count=$[ $count + 1 ] done echo "$dir的数量: $count" count=0 done [root@h1 ~]# sh count.sh . /usr/local/sbin /usr/local/bin /sbin /bin /usr/sbin /usr/bin /usr/local/jdk/bin /home/search/hadoop/bin /home/search/hadoop/sbin /usr/local/ant/bin /usr/local/maven/bin /home/search/hive/bin /home/search/hive/conf /root/bin .的数量: 32 /usr/local/sbin的数量: 0 /usr/local/bin的数量: 0 /sbin的数量: 238 /bin的数量: 93 /usr/sbin的数量: 157 /usr/bin的数量: 588 /usr/local/jdk/bin的数量: 45 /home/search/hadoop/bin的数量: 11 /home/search/hadoop/sbin的数量: 27 /usr/local/ant/bin的数量: 13 /usr/local/maven/bin的数量: 6 /home/search/hive/bin的数量: 10 /home/search/hive/conf的数量: 4 ls: 无法访问/root/bin: 没有那个文件或目录 /root/bin的数量: 0 [root@h1 ~]#
至此,我们统计文件的小脚本就完成了,有兴趣的朋友,可以在linux里面尝试一下电话号码和邮箱的验证的正则的使用!
发表评论
-
备忘几个有用的shell脚本
2015-04-07 21:59 1508(1)在shell下,操作hadoop目录,批量命名或删除, ... -
shell脚本杂记(五)
2014-09-22 19:48 20261,找出多个文件所占用的磁盘空间 du f1 f2 [roo ... -
shell脚本杂记(四)
2014-09-19 20:03 17161,wget是一个用于文件 ... -
shell自动化部署批量建立用户和批量SSH配置
2014-09-18 18:29 3630在linux下面,shell脚本熟练使用,有时候可以帮助我们解 ... -
shell自动化部署神器expect
2014-09-17 21:08 4697Shell可以实现简单的控制流功能,如:循环、判断等。但是对于 ... -
shell脚本杂记(三)
2014-09-16 19:58 16201,我们先来熟悉下正则表达式一些字符含义的基础 ^行起始标记 ... -
shell脚本杂记(二)
2014-09-15 21:25 20271,求两个文件的交集comm a.txt b.txt -1 - ... -
shell脚本杂记(一)
2014-09-12 21:50 20411,登陆系统时,$代表 ... -
跟散仙学shell编程(十五)
2014-08-27 21:24 1845上篇文章,散仙简单介绍了,如何在Linux下以shell脚本的 ... -
跟散仙学shell编程(十四)
2014-08-26 20:59 1936上篇散仙简单介绍了linu ... -
跟散仙学shell编程(十三)
2014-08-25 20:02 1326上篇散仙主要了讲述了gawk进阶的一些用法,本篇我们来了解下载 ... -
跟散仙学shell编程(十二)
2014-08-22 21:27 1586上篇文章散仙写了关于sed进阶,本篇我们来看下在linux中另 ... -
跟散仙学shell编程(十一)
2014-08-21 21:45 1663上篇散仙写了关于shell里面正则的基础知识,本篇我们来特意学 ... -
跟散仙学shell编程(九)
2014-08-19 21:49 1714上篇散仙说了如何在linux里面构建更好的交互式shell,本 ... -
跟散仙学shell编程(八)
2014-08-18 21:50 1637上篇散仙说了linux里面函数的使用,本篇我们来看下如何在sh ... -
跟散仙学shell编程(七)
2014-08-15 21:46 1810上篇散仙在文章里描述了如何处理linux信号和脚本控制,本节我 ... -
跟散仙学shell编程(六)
2014-08-14 21:53 2102上篇介绍了linux里面的处理数据的方式,本篇散仙来说下,如何 ... -
跟散仙学shell编程(五)
2014-08-13 21:41 1672上一篇写的是处理用户输入,本篇散仙要写的是linux里面的标准 ... -
跟散仙学shell编程(四)
2014-08-12 21:46 1536上篇介绍了for循环命令 ... -
跟散仙学shell编程(三)
2014-08-11 21:38 1747散仙在上一篇文章里写了关于如何使用if-else以及case等 ...
相关推荐
资深运维架构实战专家及教育培训界*专家十多年的运维实战经验总结,全面系统地讲解运维工作中Shell编程所需的知识点和Shell编程的各种企业级案例。
跟老男孩学Linux运维:Shell编程实战 PDF跟老男孩学Linux运维:Shell编程实战 PDF
《跟老男孩学Linux运维:Shell编程实战》分为五大部分:部分为第1章~第4章,此部分着重介绍新手如何学好Shell编程。涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量...
《LINUX与UNIX Shell编程指南》是一本专为初学者设计的shell编程教程,它深入浅出地介绍了在Linux和UNIX系统中如何使用Shell进行高效自动化任务处理。Shell编程是Linux和UNIX系统中的核心技术,它允许用户通过命令行...
Shell编程是Linux/Unix系统中不可或缺的一部分,它是一种命令行解释器,允许用户与操作系统进行交互,执行系统命令,以及编写脚本自动化任务。在本文中,我们将深入探讨Shell编程的基础知识,包括基本命令、变量、...
Windows Shell 编程.pdf 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用windows的外壳API做一些工作,因为外壳操作需要一些比较专业的知识,因此,大部分编程人员特别是使用集成编程环境的程序人员对...
Shell 编程中文手册 本手册涵盖了 Shell 编程的基础知识,包括 Shell 概述、Shell 解析器、Shell 脚本入门、Shell 中的变量等。 Shell 概述 Shell 是一种命令行接口,允许用户与操作系统进行交互。学习 Shell ...
《shell编程入门教程》、《shell脚本专家指南》以及《UNIX.shell编程24小时教程》会提供详尽的实例和练习,帮助你巩固所学并深化理解。 总之,Shell编程是Linux/Unix环境中不可或缺的技能,它能够提高工作效率,...
shell编程题目练习,练习基本的shell编程,学习脚本语言,提高效率
跟老男孩学Linux运维:Shell编程实战 完整版 pdf
"Linux与UNIX Shell编程指南" Linux与UNIX Shell编程指南是计算机科学领域中一本经典的指南手册,旨在帮助读者快速掌握Linux与UNIX操作系统下的shell编程技术。下面是从该书中生成的相关知识点: 1. Shell概述 ...
这个“Shell十三问”可能是指一系列关于Shell编程的问题,涵盖了基础到高级的主题。以下是一些关于Shell编程的核心知识点: 1. **什么是Shell**: Shell是一个命令解释器,它接收用户输入的命令并将其转化为操作...
学完本书后,你将成为一名shell编程高手。 内容简介 本书共分五部分 ,详细介绍了SHELL编程技巧,各种UNIX命令及语法,还涉及了UNIX的文字处理以及少量的系统管理问题。本书内容全面,文字简洁流畅,适合SHELL编程...
13Linux下Shell编程之While case演练 14Linux下Shell编程之While case演练 15Shell编程之函数及脚本案例讲解 16Shell编程之函数及脚本案例讲解 17Linux下Shell编程FIND、SED命令实战 18Linux下Shell编程FIND、SED...
这是一套完整的Unix培训教材,包括Unix常用命令及SHELL编程基础与高级技巧,PDF格式,共30个文件。另有2个Word文档。包内文件清单如下: 01_Shell-文件安全与权限.PDF 02_Shell-使用find和xargs.PDF 03_Shell-...
《Windows Shell 编程指南与实例》是一本深入探讨Windows操作系统壳层编程技术的专业书籍。在Windows系统中,Shell指的是用户界面,它为用户提供与操作系统交互的环境,包括桌面、开始菜单、快捷方式等。Shell编程则...
6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书
shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人...
**Shell编程介绍** Shell编程是Linux/Unix操作系统中的一种脚本语言,用于自动化日常任务,交互式地控制操作系统,以及实现系统级别的程序间交互。它提供了命令行接口(CLI)来执行各种系统命令,使用户能够高效地...