首页 > 代码库 > sed

sed

%s/183.56.170.5/183.56.170. 

%s/122.13.226.5/122.13.226.

%s/fengyun-mm-170.5/fengyun-mm-170.


sed

语法: sed ‘ 范围(条件) 命令‘   file

      

-n:关闭输出(选项)

 p 用来打印文本行(命令)

 sed -n ‘2,5s/tom/TOM/gp‘  file  只对满足条件的才输出 不变化的不输出(p的功能)

-e: 后面加命令(一次可以执行多个命令)(选项)

-i:修改原文件(选项)

        sed -i ‘s/tom/Tom/g‘  file

sed -i.bak ‘s/tom/Tom/g‘  file (-i 参数 不要与-n选项和 -p标签)

-r 支持扩展正则表达式(选项)

-f 后面接脚本文件(选项)

 

         分组(group):

在old部分相关位置使用()括起来,在new部分可以引用。第一个括号用\1,第二个用\2... 依次引用

 

d :删除

 cat -n passwd |sed  ‘35d‘   ;删除passwd的行

 范围可以使用,($表示最后一行)

 cat -n passwd | sed ‘10,35d‘ ;删除10到35行

 cat -n passwd | sed ‘$d‘ ;删除最后一行

 ~:表示跨步  sed ‘2 ~ 2 d‘ passwd

 正则表达式:

 sed ‘/tom/d‘ tom   含有tom删除

s: 替换

 sed ‘(范围)s/old/new/(可加标签 数字表示替换第几个 g 表示全部替换)‘  file

             old 部分可以用正则表达式  new不可以

  可以用&在new部分代替表示old部分的类容

  \U 把\U后面全部转换成大写(用在new 这部分)

  \u 把\u的第一个字符把成大写

  \L变成小写(所有)

  \l后面第一个变成小写

  \E表示终止end之意 解决\U \L的极端问题

a:在指定行的下一行增加一行

  sed  ‘$anhaoma‘ file   在最后一行后面添加一行

        i:在指定行的上一行添加

        c:替换------>把满足条件的一行都替换 (change)

            sed  ‘/^ONBOOT/c  ONBOOT=yes‘ file  把以OBBOOT开头的行都替换成 ONBOOT=yes

y:替换 y/abc/xyz/  (把a换成x,b换成y,c换成z,是这样的对应关系)(transform)

  唯一可以处理单个字符的sed编辑器命令

  如果old和new部分的长度不同 sed编辑器会产生一条错误消息

w 把那些能满足模式匹配的行保存到指定的输出文件

  sed ‘s/test/trial/w  test ‘  filename 

= 用来打印行号

l  用来列出行号

r 读取命令(r)允许你将一个独立文件中的数据插入到数据流中

    sed ‘3r filename‘   filename1

    filename  可以是绝对路径 也可以是相对路径

不能对读取命令使用地址区间

   ! 排除命令

   就是让原本起作用的命令 不起作用

sed -n ‘/header/!p‘  filenae

 //除了含有地址中指定文本的行外,文件中所有的行都打印

b  跳转命令

            sed ‘{2,3b ; s/this/that/ ;s/big/small/}‘  data2

             跳转命令为数据流中的第二行和第三行跳过了这两个替换命令

t   测试命令

            测试命令会基于替换命令的输出跳转到一个标签,而不是基于地址跳转的一个标签

& 用来代表替换命令中的匹配模式

   echo " The cat sleeps in his hat ."| sed ‘s/.at/"&"/g‘

            The "cat" sleeps in his "hat" .

   

 

 

n标签:(读取下一行,会覆盖模式空间的内容)

sed -n ‘1{n;p}‘ file

N标签:(也是读取下一行,但是它是追加)

 sed ‘{N;s/rhce/rhca/};{s/rh\nce/rh\nca/}‘  file

D:删除多行组中的一行

P:打印多行组中的一行

保持空间:x:模式空间和保持空间的内容互换,最开始保持空间为空,读取的内容都

到模式空间进行处理,打印这个操作也要到模式空间来完成的:

         h:把模式空间的内容拷贝到保持空间(覆盖)

 H:把模式空间的值追加到保持空间去(追加)

 g:把保持空间的内容写入模式空间(覆盖)

 G:把保持空间的内容写入模式空间(追加)

root@ubuntu:/shiyan# cat sedshiyan 

             aoguofu

             jingli

             limeng

             zongjian

             jige

             zongjian

             huzong

             jingli

sed -n -e ‘/jingli/!h‘ -e  ‘/jingli/{x;p}‘ sedshiyan

sed  -n -e ‘x;n‘ -e ‘/jingli/{x;p}‘  sedshiyan ##

##就是找到职位是经理的,并打印他的名字

sed -n -e ‘/jingli/!h‘ -e  ‘/jingli/{H;x;s/\n/:/;p}‘ sedshiyan

结果:aoguofu:jingli

                   huzong:jingli

这样更完美

 


 

 

   

 

 

  


sed