行的开头(^)

^匹配每一行的开头

[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与正则表达式的更多相关文章

  1. regular expression (如何用Sed和正则表达式提取子字符串)

    echo "mv u3_yunying.war   u3_yunying.war_`date +%Y%m%d%H%M`" | sed "s/\(mv\) \(\w*.wa ...

  2. linux 三大利器 grep sed awk 正则表达式

    正则表达式目标 正则表达式单字符: 特定字符 范围字符:单个字符[ ] :代表查找单个字符,括号内为字符范围 数字字符:[0-9],[259] 查找 0~9 和 2.5 .9 中的任意一个字符 小写字 ...

  3. sed 使用正则表达式进行替换

    echo "111(222)333" | sed 's/(\(.*\))\(.*\)/\2\2\2/' \1 \2 表示匹配的第几个() 在进行模式匹配时,() 需要加转义符号\ ...

  4. sed正则表达式

    sed的正则匹配如何实现非贪婪? sed的正则用的是BREs/EREs,不支持非贪婪模式.当然有一些方法可以实现非贪婪,比如: $ echo abcOabcdOabc | sed 's/.*O//' ...

  5. 正则表达式与grep和sed

    正则表达式与grep和sed 目录 1.正则表达式 2.grep 3.sed grep和sed需要正则表达式,我们需要注意的正则表达式与通配符用法的区分. 1.正则表达式 REGEXP,正则表达式:由 ...

  6. linux的文件处理(匹配 正则表达式 egrep awk sed)和系统、核心数据备份

    文件处理 1.处理方式 匹配 正则表达式 egrep awk sed 2.文件中的处理字符 \n  新行符 换行 \t  制表符 tab键 缺省8个空格 \b  退格符 backspace键 退格键 ...

  7. sed 4个功能

    [root@lanny test]# cat test.txt test liyao lanny 经典博文: http://oldboy.blog.51cto.com/2561410/949365 h ...

  8. 一个利用sed和awk处理文本的小栗子

    这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...

  9. [shell基础]——sed命令

    关于sed sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓 ...

随机推荐

  1. cocos2dx 制作单机麻将(五)

    cocos2dx 制作单机麻将(五) 麻将逻辑6 最基础的4人麻将逻辑(轮流循环出牌, 之前学的都能用上  跑起来了!!!) 最基础的麻将逻辑 依据自己须要 设置麻将人数GAME_PLAYER 基本流 ...

  2. ubuntu下打开eclipse·发现没有顶尖菜单项

    在安装eclipse时,打开集成开发环境后没有菜单项. 网上些人说要写个shell脚步,感觉有点麻烦,其实就是少了一个环境变量 BUNTU_MENUPROXY. 在/etc/profile 里面新建这 ...

  3. 阿里云cenos 6.5 模板上安装 docker

    本章将介绍在阿里云的 Centos6.5 模板上安装 Docker 以及在 Ubuntu 14.04 模板上安装 Docker 的过程 Centos 6.5 模板上使用Docker 首先,通过 ssh ...

  4. Linux常用服务安装部署

    1,centos7默认是装有python的,检查python版本的命令 # 检查python版本 : python -V 2,centOS在安装python3以及tab补全功能 下载python3源码 ...

  5. 怎样快速刪除Word中超链接?

    有时我们从网上down了一些资料,存到Word文档里,会发现一些文字和图片带有超链接.这其实是Word自动修改功能引起的麻烦,那么,有什么办法可以把这些超链接快速批量删掉吗? 步骤/方法 1 按键盘上 ...

  6. Statement 与 PreparedStatement 区别

    Statement由方法createStatement()创建,该对象用于发送简单的SQL语句 PreparedStatement由方法prepareStatement()创建,该对象用于发送带有一个 ...

  7. centos7下tomcat7 或tomcat8启动超慢原因

    1,找到你的jdk安装的位置 ${JAVA_HOME}/jre/lib/security/java.security 2,vi 打开后找到 securerandom.source=file:/dev/ ...

  8. YTU 2436: C++ 习题 输出日期时间--友元类

    2436: C++ 习题 输出日期时间--友元类 时间限制: 1 Sec  内存限制: 128 MB 提交: 1243  解决: 690 题目描述 设计一个日期类和时间类,编写display函数用于显 ...

  9. Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)——无非是在传统遍历过程中修改叶子结点加入后继结点信息(传统是stack记录),然后再删除恢复

    先看看线索二叉树 n个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域.利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索 ...

  10. 【转】Java 并发编程:volatile的使用及其原理

    一.volatile的作用 在<Java并发编程:核心理论>一文中,我们已经提到过可见性.有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果 ...