sed - stream editor for filtering and transforming text

   流编辑器的过滤和转换文本

sed [-nerf] [动作]

参数:

  -i 修改源文件 危险

  -e 直接在命令行模式上执行sed的动作编辑

  -f 直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作

  -r :使用扩展的正则表达式

    使用扩展的正则表达式需要“//”正斜线

[root@lamp scripts]# cat sed11.txt 

[root@lamp scripts]# sed -nr '/2|3/p' sed11.txt    //打印包含2或3的行        

[root@lamp scripts]# sed -nr '/2|3$/p' sed11.txt     //打印以2或3结尾的行,但是打印的是以包含2和以3结尾的行

[root@lamp scripts]# sed -nr '/(2|3)$/p' sed11.txt          //这个才是正确的以2或3结尾的行

[root@lamp scripts]# 

  -n 静默模式,默认的sed中所有来自stdin的数据一般都会被列出到屏幕上,但如果加上-n之后,则只有经过sed特殊处理的那一行才会被列出来。

[root@mysql tmp]# sed "/^a/p" sed.txt   //将以”a“开头的行打印出来,可以看到b也被打印出来了,并且a被打印了两遍,一遍是sed默认就是将模式空间中的内容打印出来,第二遍是p参数又打印了一遍
a
a
b
[root@mysql tmp]# sed -n "/^a/p" sed.txt  //使用-n参数,只讲匹配到的内容打印出来
a
[root@mysql tmp]# 

 "n"和“i”不能同时使用

[root@lamp scripts]# sed -ni "s#Port 22#Port 52113#p" /tmp/sshd_config
[root@lamp scripts]# cat /tmp/sshd_config                         //啥都没有了,经测试只有“-ni”会发生这种情况,“-in”则不会
#Port
[root@lamp scripts]# 

动作说明:[n1,n2] function

  1.LineNumber

    精确匹配的行

  2.StarLine, +N

    从startline开始,到之后的n行结束,一共是n+1行

   3.StartlLine~n

    从指定行开始指定步长

[root@lamp scripts]# cat sed.txt.
one
two
three
four
five
[root@lamp scripts]# sed -n '1~2p' sed.txt. //从第一行开始只有1,3,5行被打印出来
one
three
five
[root@lamp scripts]# 

  4.StartLine,EndLine

    $ 表示最后一行

[root@mysql tmp]# sed -n "1,2p" /etc/passwd    //打印1-2行的内容
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
[root@mysql tmp]# sed -n "30,\$p" /etc/passwd   //答应30到最后一行的内容
mysql:x::::/home/mysql:/sbin/nologin
apache:x:::Apache:/var/www:/sbin/nologin
[root@mysql tmp]# sed -n "30p" /etc/passwd        //打印第30行的内容
mysql:x::::/home/mysql:/sbin/nologin

  5./匹配模式/    支持正则表达式

    如:/^root/

  6./partern/,/partern/

    第一次被partern1匹配到的行开始,至第一次被partern2匹配到的行结束,     这中间的所有行

[root@mysql tmp]# sed -n "/bash$/p" /etc/passwd     //打印以bash结尾的行
root:x:::root:/root:/bin/bash
along:x::::/home/along:/bin/bash
[root@mysql tmp]# sed -n "/^rpc/p" /etc/passwd      //打印以rpc开头的行
rpc:x:::Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin
[root@mysql tmp]# sed -n "/^\(.*\)root/p" /etc/passwd    //打印以任意字符开头,中间有root的行
root:x:::root:/root:/bin/bash
operator:x:::operator:/root:/sbin/nologin
[root@mysql tmp]# 

function  

  = 打印行号

[root@lamp scripts]# sed -n '1~2=' sed.txt.  //打印1 3 5行号

[root@lamp scripts]# sed -n '1~2=;p' sed.txt.  //不仅打印行号,内容也打印,但是结果显示是将所有的内容都打印了,因为“p”操作前边什么都没有指定,默认就是将所有的打印

one
two

three
four

five
[root@lamp scripts]# sed -n '1~2{=;p}' sed.txt. //针对同一内容的不同操作应该使用“{}”括起来,并且不同的操作之间应该使用分号隔开

one

three

five
[root@lamp scripts]# 

  d:删除符合条件的行

  p:打印符合条件的行

    使用此命令的话,指定的内容会打印两次,这是因为sed命令默认的就是 将模式空间中的内容打印出来,而p也是打印的意思,所以会重复打印

  a \string : 在指定的行后面追加新的行,内容是string

    a的意思append追加的意思,即在指定行的后边追加内容

[root@mysql tmp]# cat sed.txt
a
b
[root@mysql tmp]# a="c"                   //设置一个变量a
[root@mysql tmp]# sed "2a $a" sed.txt     //在第二行后边追加变量a的值
a
b
c
[root@mysql tmp]# sed "2a \$a" sed.txt    //特殊符号需要转义
a
b
$a
[root@mysql tmp]# 

  i \string:  在指定的行前面添加新的行,内容是string

    ”i“就是insert的意思

[root@mysql tmp]# cat sed.txt
a
b
[root@mysql tmp]# sed '1i 1' sed.txt      //在指定行的前边添加一行

a
b
[root@mysql tmp]# 

  r File:将指定文件的内容添加至符合条件的行处

[root@mysql tmp]# cat sed.txt
a
d
[root@mysql tmp]# cat sed1.txt
b
c
[root@mysql tmp]# sed "2r ./sed1.txt" sed.txt   //将sed1.txt的内容在sed.txt的第二行开始添加
a
d
b
c
[root@mysql tmp]# 

  w File:将指定范围的内容添加至指定的文件中去

[root@mysql tmp]# sed -n "30,\$w ./a.txt" /etc/passwd    //将passwd文件的最后两行写入到a.txt文件中去
[root@mysql tmp]# cat a.txt
mysql:x::::/home/mysql:/sbin/nologin
apache:x:::Apache:/var/www:/sbin/nologin
[root@mysql tmp]# 

  s /partern1/partern2/修饰符  查找替换 默认只替换第一次被匹配到的字符串

    不仅可使用s ///也可以使用s ### ,s @@@等,s 命令也可以支持后向引用

将garnett替换成kobe,html替换成HTML

[root@lamp ~]# echo garnett-linux.html|sed "s#garnett\(.*\)html#kobe\1HTML#g"
kobe-linux.HTML
[root@lamp ~]# 

修饰符:

  g:全局替换

[root@lamp scripts]# head /etc/passwd|sed "s#[a-z]##" //发现只是将每一行的第一个字母替换成空 ,因为”s“默认只替换第一次被匹配到的字符串
oot:x:::root:/root:/bin/bash,
::bin:/bin:/sbin/nologin
aemon:x:::daemon:/sbin:/sbin/nologin
dm:x:::adm:/var/adm:/sbin/nologin
p:x:::lp:/var/spool/lpd:/sbin/nologin
ync:x:::sync:/sbin:/bin/sync
hutdown:x:::shutdown:/sbin:/sbin/shutdown
alt:x:::halt:/sbin:/sbin/halt
ail:x:::mail:/var/spool/mail:/sbin/nologin
ucp:x:::uucp:/var/spool/uucp:/sbin/nologin
[root@lamp scripts]# head /etc/passwd|sed "s#[a-z]##g"   //加上"g"参数即可,可以重复替换
:::::/://
:::::/://
:::::/://
::::://://
:::::///://
:::::/://
:::::/://
:::::/://
:::::///://
:::::///://
[root@lamp scripts]# 

  i:忽略大小写  

实战:

  使用sed命令取ip地址

[root@lamp scripts]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr :0C:::CD:
          inet addr:192.168.220.129  Bcast:192.168.220.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe17:cd98/ Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:  Metric:
          RX packets: errors: dropped: overruns: frame:
          TX packets: errors: dropped: overruns: carrier:
          collisions: txqueuelen:
          RX bytes: ( (208.2 KiB)

[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*)  Bc(.*)#\2#gp"
192.168.220.129
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*)  Bcast:(.*) (.*)#\2#gp"
192.168.220.129
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*)  Bcast:(.*) (.*)#\2\3#gp"

[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*)  Bcast:(.*) (.*)#\2 \3#gp"
192.168.220.129 192.168.220.255
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*)  Bcast:(.*) (.*)#\2\t\3#gp"
192.168.220.129 192.168.220.255
[root@lamp scripts]#
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*)  Bcast:(.*) (.*)#ping \2#gp"
ping 192.168.220.129
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*)  Bcast:(.*) (.*)#ping \2#gp"|bash
PING () bytes of data.
 bytes from  ttl= time=0.032 ms
 bytes from  ttl= time=0.033 ms
 bytes from  ttl= time=0.045 ms
 bytes from  ttl= time=0.040 ms

^C
--- 192.168.220.129 ping statistics ---
 packets transmitted,  received, % packet loss, time 8225ms
rtt min/avg/max/mdev = 0.022/0.038/0.049/0.008 ms
[root@lamp scripts]#  

Linux中的sed命令的更多相关文章

  1. Linux中使用sed命令或awk命令修改常规配置文件

    一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...

  2. Linux中使用sed命令替换字符串小结

    sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的 ...

  3. 【转】linux中的sed命令

    转自:http://www.cnblogs.com/shineshqw/articles/1978122.html 功能说明: 利用script来处理文本文件. 语 法:sed [-hnV][-e&l ...

  4. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  5. linux三剑客之sed命令

    一.前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...

  6. day14 linux三剑客之sed命令

    day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...

  7. Linux中的历史命令

    Linux中的历史命令一般保存在用户    /root/.bash_history history 选项 历史命令保存文件夹 选项     -c:清空历史命令     -w :把缓存中的历史命令写入历 ...

  8. 关于XShell的常见使用和设置以及Linux中的常见命令.

    本文部分转自:http://sundful.iteye.com/blog/704079 和 http://www.vckai.com/p/5 有时候在XShell中操作的一些命令傻傻的分不清这个命令到 ...

  9. linux中的strings命令简介2

    摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 之前我们聊过linux strings的用法和用 ...

随机推荐

  1. OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)

    OVS 的数据流向都是由 Flow 规则控制的,今天我们就来分析 VxLAN 的 Flow 规则.提个醒:这可能是本教程最烧脑的一节,let's rock it ! 下面分析控制节点上的 flow r ...

  2. List<bean>转换Jsonarray知识心得

    使用基本的jdbc连接mysql,获取数据. 创建实体类user: package com.json; public class user { private int id; private Stri ...

  3. Ant学习总结1

    一.Ant简介 Ant是用来编译/运行/测试java程序,构建.包装和发布过程中几乎每一件事都可以由Ant的任务来处理. 二.Ant管理项目    当开始一个新的项目时,首先应该编写Ant的构建文件, ...

  4. Android开发10:传感器器及地图相关应用

    前言 啦啦啦~各位小伙伴们好~经过这一学期的Android知识的学习,我们学到了很多和Android开发相关的知识,这一学期的学习也要告一段落了. 一起进入我们今天的相关内容~这次我们将一起学习使用 ...

  5. oracle系列笔记(2)---多表查询

    多表查询     这篇文章主要讲四点: (1)oracle多表查询    (2)SQL99标准的连接查询   (3)子查询     (4)分级查询 oracle多表查询有两种方式,一种是oracle所 ...

  6. Tcl/tk缩放Truetype字体时的精度问题

    最近有国内新客户抱怨我们产品显示的原理图太不专业了,在原理图上使用宋体GB2312设计好中文图表,经过几次缩放时,表格内的文字居然会跑到表格外边,更要命的是打印出来的文档也存在同样的问题. 我研究了一 ...

  7. 从源码解析LinkedList集合

         上篇文章我们介绍了ArrayList类的基本的使用及其内部的一些方法的实现原理,但是这种集合类型虽然可以随机访问数据,但是如果需要删除中间的元素就需要移动一半的元素的位置,效率低下.并且它内 ...

  8. Alamofire源码解读系列(三)之通知处理(Notification)

    本篇讲解swift中通知的用法 前言 通知作为传递事件和数据的载体,在使用中是不受限制的.由于忘记移除某个通知的监听,会造成很多潜在的问题,这些问题在测试中是很难被发现的.但这不是我们这篇文章探讨的主 ...

  9. smarty模板调数据库并做添加删除修改和分页

    smarty模板只要就是实现分离效果所以每个功能都需要两个页面一个是HTML  和 PHP  两部分组成 使用smarty模板要在main文件夹下面创建login.php文本,要用smarty模板首先 ...

  10. Windows 黑屏问题

    这两天使用Microsoft Visual Studio编译项目,不断黑屏闪现!回想下应该是之前设置的DOS窗口全屏的原因. 记得又一次使用MSDOS,老感觉屏幕台下,于是就设置成了全屏显示,全屏后发 ...