一. 正则表达式

1. 常见的正则表达式字符

[]     匹配字符集   grep "bl[lo]g" oldboy.txt   表示字符‘l’或者‘o’都可匹配
* 重复前面字符任意次 grep "bl*g" oldboy.txt
.* 表示任意多个字符
[^] 表示非 grep "【^oldboy】" oldboy.txt 匹配文档中不是“oldboy”当中的任意字符
a{n,m} 重复字符a 最少n次,最多m次
a{,m} 重复字符a 最少0次,最多m次 #有些版本这个不支持了
a{n,} 重复字符a 最少n次
a{n} 重复字符a n次

  

 
注意:
实际使用中要在大括号前加转义字符 \         例如:grep "490\{2,3\}328" oldboy.txt       如果用egrep不用加转义字符 \
 
 

2. 扩展的正则表达式:grep -E或者egrep

a+ : 重复字符a     一次以上      grep -E "490+480" oldboy.txt; 等价于a{1,}

a? :  重复字符a      0次或者1次  等价于a{,1}或者a{0,1}

|   :用或的方式查找多个符合条件的字符    注意这里的符号“|” 前后不能有空格,个人理解等价于[]

() : 小括号内表示把多个字符当做一组进行查找,相当于一个字符

 

例子1.  

            
 
例子2
 

二. sed常见用法

常用选项:

-n:取消默认输出,只有经过sed特殊处理的那一行(或者动作)才会被列出来

-e:进行多项编辑,即对输入行应用多条sed命令时使用

-f:指定sed脚本的文件名,直接将sed的动作写在一个档案内,-f filename可以执行filename内的sed动作

-r:可支持扩展正则表达式

-i:直接修改读取的文件内容,而不是由屏幕输出

插入

sed -i '1 i oldboy' aa.txt  
sed -i:表示直接编辑修改读取的文件内容     1:表示在第一行插入    i:表示插入   oldboy是插入内容   
 
 

多点编辑 (sed -e)

sed -e '1,10d' -e 's/My/Your/g' datafile  

直接编辑文件内容 (sed -i)

如果只用-e只是把输出的内容做了更改,并不会修改文件中的内容,要修改必须加-i 参数
例如:
sed -i -e '2 i character_set_server=uft8' -e '3 i binlog_format=row' /etc/my.cnf
优化1:消除空格,使用i是在目前的上一行插入数据
sed -i -e '2 i character_set_server=uft8' -e '2 i binlog_format=row' /etc/my.cnf 说明sed是从前到后按命令分步执行的。 优化2:消除空格,使用a是在目前的下一行插入数据,这个使用了转义字符\n来换行,这样就不用多点编辑选项-e了
sed -ir "/[mysqld]/ a character_set_server=utf8 \nbinlog_format=row" /etc/mysql/my.cnf
 
 
 
 

三. sed实战

以网卡eth0的输出信息为例,取出10.0.0.7这个IP地址

1. sed过滤第二行

 ifconfig eth0 |sed -n '/inet addr/p' 
或者
ifconfig eth0 | sed -n '2p'

特别要注意后面的p必须在单引号内,p就是输出的意思,n是取消默认输出。输出信息为

2. 用sed的参数sg进行全局替换,格式为sed 's###g'

s#ddd#kkk#g  就是把ddd替换为kkk,如果不写kkk那就是替换为空,要想取出10.0.0.7,需要把它前面和后面的字符都替换为空 

1)替换10.0.0.7前面的字符,口诀就是以什么开头,以挨着目标前面的字符结尾

一般是以任意字符开头 ^.*    以addr:结尾,这个例子中也可写成以r:结尾,因为这里r:也是唯一的。写到命令中就是 sed 's#^.*addr:##g'  (其实也可以不要^字符)

2)然后,干掉后面的字符,

需要再来一个替换,严格上来讲,要以2个空格Bc开头,任意字符结尾,这里直接用Bc开头也行,sed 's#  Bc.*$##g' (这里末尾可不用$)

3. 用sed完全匹配ip地址,用()限定ip地址组,它的作用是相当于一个字符

ifconfig eth0 | sed -rn 's#^.*inet addr:(.*)  Bcast.*$#\1#gp'

说明:

1. -r(regexp-extended),sed -nr 这样小括号前就不需要用转义字符了

2. sed中\1表示命令中的从左边数第一个小括号()的输出内容,同理 \2 表示第2个小括号内容,当然这里只有1个小括号,就不存在\2的情况了

3. (  ) 在替换命令中是“组”的用法(正则表达式中也是这样),后面可以用\1 \2 等来分别引用前面括起来的部分。
 

4. 补充例子

我利用该指令的格式为:sed 's#old#new#g' file 但是利用该格式并不能实现完全匹配替换。例如我要替换文本中的“the”字符串,但是文本内的“other”中间部分也被替换了。如何解决?
sed 's#\<old\>#new#g' file 
这个是匹配单词一样的东西
意思就是限制它的宽度 去掉左右两边之一的那个“>" 符号就相当于放宽那边不限制
 
 
 

正则表达式,sed简单用法的更多相关文章

  1. sed 简单用法

    sed的一个简单用法: eg:在某一个文件中的一个aaa字段前后添加某些字段. 在aaa前面添加字段:sed -ne 's/aaa/&HELLO/p' test 输出结果:aaaHELLO 在 ...

  2. sed简单用法

    参数说明: -e 以指定的script来处理输入的文本文件 -f 以指定的script文件来处理输入的文本文件 -h 显示帮助 -n 仅显示script处理后的结果 -V 显示版本信息 -v 反选 动 ...

  3. UltraEdit中使用正则表达式-简单用法

    UltraEdit中使用正则表达式 1.认识正则表达式语法: 正则表达式 (UltraEdit Syntax): % 匹配行首 - 表明要搜索的字符串一定在行首. $ 匹配行尾 - 表明要搜索的字符串 ...

  4. sed命令用法详解

    sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space) ...

  5. Shell基础(五):sed基本用法、使用sed修改系统配置、sed多行文本处理、sed综合脚本应用

    一.sed基本用法 目标: 本案例要求熟悉sed命令的p.d.s等常见操作,并结合正则表达式,完成以下任务: 1> 删除文件中每行的第二个.最后一个字符    2> 将文件中每行的第一个. ...

  6. linux中sed的用法【转】

    sed命令行格式为:         sed [-nefri]  ‘command’  输入文本/文件 常用选项:        -n∶取消默认的输出,使用安静(silent)模式.在一般 sed 的 ...

  7. NSCharacterSet 简单用法

    NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...

  8. sed基本用法

    sed命令基本用法sed是一个非交互式文本编辑器,它可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘输入.文件重定向.字符串.变量.来自管道的文本等等.sed从文本的一个文本行或标准输入中读取 ...

  9. Linux中sed的用法实践

    Linux中sed的用法实践 参考资料:https://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html http://www.fn139 ...

随机推荐

  1. 压力测试工具--Siege

    Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力.可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行.s ...

  2. 695. Max Area of Island最大岛屿面积

    [抄题]: 求最多的联通的1的数量 Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (repre ...

  3. hdcloud SOA架构

    SOA是一个范式   多租户技术 一个租户可以是任何一个应用--或者是企业内部应用,或外部应用,它需要有自己的安全的和排他的虚拟计算环境.该环境包含了从存储到用户界面的所有或者某些选定的企业架构层.所 ...

  4. ECC 算法

    一.简介 1)椭圆曲线密码学的初级读本 http://8btc.com/thread-1240-1-1.html 2)ECC加密算法入门介绍 http://www.pediy.com/kssd/ped ...

  5. python基础之-数据类型

    Python3 数字(Number) Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间. 以下实例在变量赋值时 Number 对 ...

  6. Hadoop压缩之CompressionCodecFactory

    1.CompressionCodecFactory简介 当在读取一个压缩文件的时候,可能并不知道压缩文件用的是哪种压缩算法,那么无法完成解压任务.在Hadoop中,CompressionCodecFa ...

  7. 编写高质量代码改善C#程序的157个建议——建议128:考虑让派生类的名字以基类名字作为后缀

    建议128:考虑让派生类的名字以基类名字作为后缀 派生类的名字可以考虑以基类名字作为后缀.这带来的好处是,从类型的名字上我们就知道它包含在哪一个继承体系中. Exception及其子类就是这样一个典型 ...

  8. javascript事件坐标

    clientX 鼠标在页面显示区域的坐标 screenX鼠标在显示屏幕上的坐标 layerX 鼠标相对于“触发事件的元素的层级关系中离该元素最近的,设置了position的父元素”的边界的位置,从bo ...

  9. linux查看日志文件内容命令tail、cat、tac、head、echo详解

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------- ...

  10. Apache网站服务

    Apache 下载地址: http://mirror.bit.edu.cn/apache/httpd/相关软件下载地址:http://mirror.bjtu.edu.cn/apache/apr/apr ...