sed与正则表达式
行的开头(^)
^匹配每一行的开头
[root@sishen ~]# sed -n '/^103/ p ' employee.txt
103,Raj Reddy,Sysadmin
只有^出现在正则表达式开头时,它才匹配行的开头,所以,^N匹配所有以N开头的行。
行的结尾($)
$匹配行的结尾
显示以字符r结尾的行
[root@sishen ~]# sed -n '/r$/ p' employee.txt
102,Jason Smith,IT Manager
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
单个字符(.)
元字符点 . 匹配除换行符之外的任意单个字符
l . 匹配单个字符
l . . 匹配两个字符
l . . .匹配三个字符
l …..依次类推
下面的例子中,模式”J后面跟三个字符和一个空格”将被替换为“Jason后面一个空格”
所以“J····“后面同时匹配employee.txt文件中的“John”和“Jane”,替换结果如下
[root@sishen ~]# sed -n 's/J.../Jason/ p' employee.txt
101,Jason Doe,CEO
102,Jasonn Smith,IT Manager
105,Jason Miller,Sales Manager
匹配0次或多次(*)
星号*匹配0个或多个其前面的字符,如:1*匹配0个或多个1
首先建立测试文件
[root@sishen ~]# vim log.txt
log:input.txt
log:
log:testing resumed
log:
log:output created
例如:只查看包含log且后面有信息的行
[root@sishen ~]# sed -n '/log: *./p' log.txt #注意log冒号后面有空格,而且点也是必须的
log:input.txt
log:testing resumed
log:output created
匹配一次或多次(\+)
“\+”匹配一次或多次他前面的字符,例如 空格\+ 或 “\+“匹配至少一个或多个空格
只显示包含log且log后面有一个或多个空格的所有行
[root@sishen ~]# sed -n '/log: \+/ p' log.txt
log: input.txt
log: testing resumed
注意<tab>与空格不同
零次或一次匹配(\?)
\?匹配0次货一次他前面的字符
[root@sishen ~]# sed -n '/log: \?/ p' log.txt
log: input.txt
log:
log: testing resumed
log:
log:output created
转义字符(\)
如果要在正则表达式中搜寻特殊字符(如:*, .)必须使用\来转义它们
[root@sishen ~]# sed -n '/127\.0\.0\.1/ p' /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
字符集[0-9]
匹配包含2、3、或者4的行
[root@sishen ~]# sed -n '/[234]/p' employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
注意:方括号中,可以是哟个连接字符指定一个字符范围,如[0123456789]可以用[0-9]表示,字母可以用[a-z],[A-Z]表示,等等
匹配包含2、3或者4的行另一种方式
[root@sishen ~]# sed -n '/[2-4]/p' employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
其他正则表达式
或操作符(|)
管道符号用来匹配两边任意一个子表达式,子表达式1|子表达式2匹配子表达式1或者子表达式2
打印包含101或者包含102的行
[root@sishen ~]# sed -n '/101\|102/p' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
打印包含数字2~3或者包含105的行
[root@sishen ~]# sed -n '/[2-3]\|105/p' employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
105,Jane Miller,Sales Manager
精确匹配m次({m})
正则表达式后面跟上{m}注明精确匹配该正则m次
首先建立测试文件
[root@sishen ~]# vim number.txt
1
12
123
1234
12345
123456
打印包含任意数字的行(相当于打印所有的行对于该文件来说)
[root@sishen ~]# sed -n '/[0-9]/p' number.txt
1
12
123
1234
12345
123456
打印只包含5个数字的行
[root@sishen ~]# sed -n '/^[0-9]\{5\}$/p' number.txt
12345
注意这里一定要有开头和结尾符号
匹配m至n次({m,n})
正则表达式后面跟上{m,n}表明精确匹配该正则至少m,最多n次,m和n不能是负数,并且要小于255
打印由3至5个数字组成的行
[root@sishen ~]# sed -n '/^[0-9]\{3,5\}$/ p' number.txt
123
1234
12345
正则表达式后面跟上{m,}表明精确匹配该正则至少m,最多不限,(同样如果是{,n}表明最多n次最少一次)
字符边界(\b)
\b用来匹配单词开头(\bxx)或(xx\b)的任意字符,因此\bthe\b将匹配the,但不匹配they,\bthe将匹配the或they
首先建立测试文件
[root@sishen ~]# vim words.txt
word matching using:the
word matching using:thethe
word matching using:they
匹配包含the作为整个单词的行
[root@sishen ~]# sed -n '/\bthe\b/ p' words.txt
word matching using:the
注意如果没有后面的那个\b,效果将等同匹配包含所有以the开头的单词的行
[root@sishen ~]# sed -n '/\bthe/ p' words.txt
word matching using:the
word matching using:thethe
word matching using:they
回溯引用(\n)
使用回溯引用可以给正则表达式分组,以便后面引用他们
只匹配重复the两次的行
[root@sishen ~]# sed -n '/\(the\)\1/ p' words.txt
word matching using:thethe
同理,“\([0-9]\)\1“匹配连续两个相同的数字,如11,22,33 ····
在sed替换中使用正则表达式
把employee.txt 中每行最后两个字符替换为“Not defined “:
[root@sishen ~]# sed -n 's/..$/,Not Defined/ p' employee.txt
101,John Doe,C,Not Defined
102,Jason Smith,IT Manag,Not Defined
103,Raj Reddy,Sysadm,Not Defined
104,Anand Ram,Develop,Not Defined
105,Jane Miller,Sales Manag,Not Defined
删除Manager及其以后的字符:
[root@sishen ~]# sed 's/Manager.*//' employee.txt | cat -A
101,John Doe,CEO$
102,Jason Smith,IT $
103,Raj Reddy,Sysadmin$
104,Anand Ram,Developer$
105,Jane Miller,Sales $
注意:原文中没有“|cat -A“,是为了表现102和105最后的空格而添加的
删除所有以#开头的行
[root@sishen ~]# cat employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
#106,Jane Miller,Sales Manager
#107,Jane Miller,Sales Manager
[root@sishen ~]# sed -e 's/^#.*// ; /^$/d' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
[root@sishen ~]# sed '/^#/d' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
首先建立test.html文件
[root@sishen ~]# vim test.html
<html><body><h1>Hello word!</h1></body></html>
清楚test.html文件中的所有html标签
[root@sishen ~]# sed 's/<[^>]*>//g' test.html
Hello word!
删除所有注释和空行
[root@sishen ~]# sed -e 's/#.*//;/^$/ d' /etc/profile
只删除注释行不删除空行
[root@sishen ~]# sed '/^#.*/d' /etc/profile
使用sed可以把DOS的换行符(CR/LF)替换为Unix格式。当把DOS格式的文件拷贝到Unix上,你会发现,每行结尾都有\r\n
使用sed把DOS格式的文件转换为Unix格式
[root@sishen ~]# sed 's/.$//' filename
sed与正则表达式的更多相关文章
- regular expression (如何用Sed和正则表达式提取子字符串)
echo "mv u3_yunying.war u3_yunying.war_`date +%Y%m%d%H%M`" | sed "s/\(mv\) \(\w*.wa ...
- linux 三大利器 grep sed awk 正则表达式
正则表达式目标 正则表达式单字符: 特定字符 范围字符:单个字符[ ] :代表查找单个字符,括号内为字符范围 数字字符:[0-9],[259] 查找 0~9 和 2.5 .9 中的任意一个字符 小写字 ...
- sed 使用正则表达式进行替换
echo "111(222)333" | sed 's/(\(.*\))\(.*\)/\2\2\2/' \1 \2 表示匹配的第几个() 在进行模式匹配时,() 需要加转义符号\ ...
- sed正则表达式
sed的正则匹配如何实现非贪婪? sed的正则用的是BREs/EREs,不支持非贪婪模式.当然有一些方法可以实现非贪婪,比如: $ echo abcOabcdOabc | sed 's/.*O//' ...
- 正则表达式与grep和sed
正则表达式与grep和sed 目录 1.正则表达式 2.grep 3.sed grep和sed需要正则表达式,我们需要注意的正则表达式与通配符用法的区分. 1.正则表达式 REGEXP,正则表达式:由 ...
- linux的文件处理(匹配 正则表达式 egrep awk sed)和系统、核心数据备份
文件处理 1.处理方式 匹配 正则表达式 egrep awk sed 2.文件中的处理字符 \n 新行符 换行 \t 制表符 tab键 缺省8个空格 \b 退格符 backspace键 退格键 ...
- sed 4个功能
[root@lanny test]# cat test.txt test liyao lanny 经典博文: http://oldboy.blog.51cto.com/2561410/949365 h ...
- 一个利用sed和awk处理文本的小栗子
这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...
- [shell基础]——sed命令
关于sed sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓 ...
随机推荐
- CDN具体解释(篇二)
还有还有一个问题就是全部的内容都放在同一个地方.假设我们的server在芝加哥,那么美国中西部的人们訪问server的响应时间和用户体验就比香港.德国.南非以及佛罗里达州的用户好.由于那些用户离ser ...
- LeetCode 168 Excel Sheet Column Title(Excel的列向表标题)
翻译 给定一个正整数,返回它作为出如今Excel表中的正确列向标题. 比如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 - ...
- PAT-PAT (Advanced Level) Practise 1001. A+B Format (20) 【二星级】
题目链接:http://www.patest.cn/contests/pat-a-practise/1001 题面: 1001. A+B Format (20) Calculate a + b and ...
- oracle--Windows不能在本地计算机启动OracleDBConsoleorcl .错误代码1
安装完数据库后能够启动,重新启动电脑后,手动启动就会报错. 现象: Windows 不能在 本地计算机 启动 OracleDBConsoleorcl.有关很多其它信息.查阅系统事件日志.假设这是非 M ...
- ul、li中的DIV垂直居中
当li高度可动态改变时,li中的DIV始终保持垂直居中. 由于高度不固定,不能用margin或者padding解决. 最头疼的是vertical-align: middle;也莫名其妙的失效了. 最终 ...
- /dev/zero和/dev/null的区别
http://www.cnblogs.com/jacktu/archive/2010/06/28/1766791.html /dev/zero和/dev/null的区别 使用/dev/null 把 ...
- WinPE:创建 USB 可引导驱动器
https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn938386(v=vs.85).aspx
- IntelliJ Idea 工具
IntelliJ Idea 优化: 1.如何取消文件自动保存 File->Settings -> Appearance&Behavior -> System Setting ...
- UICollectionView与UITableView混用手势冲突
前言 最近在重构某个模块,以后别人封装的所谓的基类就像一坨死一样,看见就恶心,相信同行的你们能够明白那种心情.为什么要重构?并不是真的因为它像一坨死,而是因为这个模块是用户使用最频繁的,而且出现了不少 ...
- Masonry 动画更新约束
前言 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自动布局,也有人使用frame来适配.对于前者,笔者并不喜欢,也不支持.对于后者,更是麻烦,到处计算高度.宽度等,千万 ...