shell高级-----正则表达式
正则表达式概述
正则表达式是一种定义的规则,Linux工具可以用它来过滤文本。
基础正则表达式
纯文本
[root@node1 ~]# echo "this is a cat" | sed -n '/cat/p'
this is a cat
[root@node1 ~]# echo "this is a cat" | gawk '/cat/{print $0}'
this is a cat
正则表达式的匹配非常挑剔,尤其需要记住,正则表达式区分大小写。
特殊字符
正则表达式识别的特殊字符包括:
.*[]^${}\+?|()
如果要使用某个特殊字符作为文本字符,就必须转义,一般用(\)来转义。
[root@node1 ~]# echo "this is a $" | sed -n '/\$/p'
this is a $
锚字符
有两个特殊字符可以用来将模式锁定在数据流的行首或行尾
脱字符(^)定义从数据流中文本行的行首开始的模式。
美元符($)定义了行尾锚点。
[root@node1 ~]# echo "this is a cat" | sed -n '/^this/p'
this is a cat
[root@node1 ~]# echo "this is a cat" | sed -n '/cat$/p'
this is a cat
在一些情况下可以组合使用这两个命令
1.比如查找只含有特定文本的行
[root@node1 ljy]# more test.txt
this is a dog
what
how
this is a cat
is a dog
[root@node1 ljy]# sed -n '/^is a dog$/p' test.txt
is a dog
[root@node
2.两个锚点组合起来,可以直接过滤空白行
[root@node1 ljy]# more test.txt
this is a dog
what
how this is a cat
is a dog
[root@node1 ljy]# sed '/^$/d' test.txt
this is a dog
what
how
this is a cat
is a dog
点号字符
点号用来匹配除换行符外的任意单个字符,他必须匹配一个字符。
[root@node1 ljy]# more test.txt
this is a dog
what
how
this is a cat
is a dog
at
[root@node1 ljy]# sed -n '/.at/p' test.txt
what
this is a cat
字符组
限定待匹配的具体字符,使用字符组。使用方括号来定义一个字符组。
[root@node1 ljy]# more test.txt
this is a dog
this is a Dog
this is a DoG
this is a cat
[root@node1 ljy]# sed -n '/[dD]og/p' test.txt
this is a dog
this is a Dog
[root@node1 ljy]# sed -n '/[dD]o[gG]/p' test.txt
this is a dog
this is a Dog
this is a DoG
排除型字符组
要排除某些特定的元素,要在字符组前面加个脱字符。
[root@node1 ljy]# sed -n '/[dD]o[gG]/p' test.txt
this is a dog
this is a Dog
this is a DoG
[root@node1 ljy]# sed -n '/[^D]og/p' test.txt
this is a dog
区间
正则表达式会包括此区间内的任意字符。
[root@node1 ljy]# more test.txt
123123
1231
121222222
412345341613
vsdvs
qwer12344123
12345
34211
444444
[root@node1 ljy]# sed -n '/^[0-9][0-9][0-9][0-9][0-9]$/p' test.txt
12345
34211
拓展正则表达式
问号
问号表明前面的字符出现0次或者1次,仅限于此。
[root@node1 ljy]# echo "bat" | gawk '/ba?t/{print $0}'
bat
[root@node1 ljy]# echo "baat" | gawk '/ba?t/{print $0}'
[root@node1 ljy]# echo "bt" | gawk '/ba?t/{print $0}'
bt
可以将问号和字符组一起使用
[root@node1 ljy]# echo "bt" | gawk '/b[ae]?t/{print $0}'
bt
[root@node1 ljy]# echo "bat" | gawk '/b[ae]?t/{print $0}'
bat
[root@node1 ljy]# echo "bet" | gawk '/b[ae]?t/{print $0}'
bet
[root@node1 ljy]# echo "baat" | gawk '/b[ae]?t/{print $0}'
加号
加号表明前面的字符可以出现一次或多次,但至少是1次。
[root@node1 ljy]# echo "baat" | gawk '/b[ae]+t/{print $0}'
baat
[root@node1 ljy]# echo "bt" | gawk '/b[ae]+t/{print $0}'
[root@node1 ljy]# echo "bt" | gawk '/ba+t/{print $0}'
[root@node1 ljy]# echo "bat" | gawk '/ba+t/{print $0}'
bat
[root@node1 ljy]# echo "baat" | gawk '/ba+t/{print $0}'
baat
花括号
ERE中的花括号允许你为可重复的正则表达式规定上下限。
m,n最少出现m此,最多出现n次。
[root@node1 ljy]# echo "baat" | gawk '/b[ae]{1,2}t/{print $0}'
baat
[root@node1 ljy]# echo "baaat" | gawk '/b[ae]{1,2}t/{print $0}'
管道符号
用逻辑or的方式指定正则表达式规则,其中一个条件符合要就即可。
表达式分组
正则表达式分组也可以用圆括号进行分组。
[root@node1 ljy]# echo "bat" | gawk '/b(a|e)t/{print $0}'
bat
[root@node1 ljy]# echo "baat" | gawk '/b(a|e)t/{print $0}'
[root@node1 ljy]# echo "bet" | gawk '/b(a|e)t/{print $0}'
bet
shell高级-----正则表达式的更多相关文章
- Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程
Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...
- 跟着老男孩一步步学习Shell高级编程实战
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...
- (转)跟着老男孩一步步学习Shell高级编程实战
原文:http://oldboy.blog.51cto.com/2561410/1264627/ 跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...
- Shell 编程 正则表达式
本篇主要写一些shell脚本正则表达式的使用基础. 概述 正则表达式分为基础正则表达式(Regular Expression)与扩展正则表达式(Extended Regular Expression) ...
- shell 的 正则表达式
shell的正则表达式规则 https://www.jb51.net/tools/shell_regex.html 常规字符 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.例如,“n ...
- Unix Shell 程序设计 —— 正则表达式
参考:http://www.cnblogs.com/erichhuang/archive/2012/03/13/2394119.html 简介: 简单的说,正则表达式是一种可以用于模式匹配和替换的强有 ...
- 高级正则表达式技术(Python版)
正则表达式是从信息中搜索特定的模式的一把瑞士军刀.它们是一个巨大的工具库,其中的一些功能经常被忽视或未被充分利用.今天我将向你们展示一些正则表达式的高级用法. 举个例子,这是一个我们可能用来检测电话美 ...
- [shell编程]正则表达式
如果在shell脚本中处理数据文件,那么我们就必须熟悉正则表达式.正则表达式是用来过滤数据流中文本的模式模板,模式由标准文本字符和特殊字符组成.正则表达式用特殊字符来匹配一系列一个或多个字符,要想掌握 ...
- shell:正则表达式和文本处理器
1.什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 生活中处处都是正则: 比如我们描述:4条腿 你可能会想 ...
随机推荐
- CSS media queries 媒体查询
最近在做一些页面打印时的特殊处理接触到了media queries,想系统学习一下,在MOZILLA DEVELOPER NETWORK看到一篇文章讲的很不错,结合自己的使用总结一下. CSS2/me ...
- Linux fing cd 查找文件/文件夹并进入目录命令
查找文件|文件夹并进入目录命令:cd $() [root@localhost /]# cd $(dirname "`find / -name 'ifcfg-ens33'`") // ...
- 模块之time与datetime
模块之time与datetime import time print (time.clock()) print(time.process_time()) #测量处理器运算时间 print(time.a ...
- 团队作业-Beta冲刺(周四)
一. 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.c ...
- 阿里云(ecs服务器)使用3-安装mysql数据库以及远程部署
1.安装 1.下载rpm包,下载地址 http://dev.mysql.com/downloads/mysql/,选择Linux-Generic版本 .新建 /usr/local/mysql 文件夹, ...
- ELK是什么?
ELK = ElasticSearch + Logstash + Kibana Elasticsearch:后台分布式存储以及全文检索 Logstash : 日志加工.“搬运工” Kibana : ...
- string::find_first_not_of
string (1) size_t find_first_not_of (const string& str, size_t pos = 0) const noexcept; c-string ...
- IDEA查看JDK源代码
之前已经讲解过如何使用Eclipse查看源代码,IDEA作为一个集成开发环境越来越流行,今天学习以下如何使用Eclipse查看JDK的代码. File->Project Structure,选择 ...
- 细数meta标签的奥秘
因为看到了一个很不错的h5自适应网站,觉得很不错,于是好奇心作祟,让我翻开了它的源码一探究竟,最先研究的是它的meta标签,好了,废话不多说,以下是我总结的和比较实用的meta标签,如有错误,请多多指 ...
- 一例基于thinkphp,jquery和bootstrap渲染的查询数据分页器
对于某些查询记录很多的结果,web页面不得不采用分页器,现在奉上一例代码,其主要逻辑是:由页面的dom 节点发起ajax请求,返回的查询结果根据页面布局需要进行切片:并根据总记录数和页面展现的条数算出 ...