sed 基础用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed 基础用法相关的知识,希望对你有一定的参考价值。

sed 以行为单位进行数据替换删除添加选取指定内容



参数:


使用管道:

d 删除

a 添加一行内容于指定行的下一行

i 插入一行内容于指定行的上一行

c 用一行自定义内容替换掉某行或连续多行内容

p 打印指定行

s 支持正则表达式的字符替换


例:

[[email protected] /data/backup]#cat /etc/passwd | head -6 > studysed

[[email protected] /data/backup]#cat studysed 

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

先找个文件

删除:

[[email protected] /data/backup]#nl studysed | sed ‘2d‘

     1root:x:0:0:root:/root:/bin/bash

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

[[email protected] /data/backup]#nl studysed | sed ‘2,5d‘

     1root:x:0:0:root:/root:/bin/bash

     6sync:x:5:0:sync:/sbin:/bin/sync

[[email protected] /data/backup]#nl studysed | sed ‘2a 00000000‘

     1root:x:0:0:root:/root:/bin/bash

     2bin:x:1:1:bin:/bin:/sbin/nologin

00000000

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

[[email protected] /data/backup]#nl studysed | sed ‘2i 00000000‘

     1root:x:0:0:root:/root:/bin/bash

00000000

     2bin:x:1:1:bin:/bin:/sbin/nologin

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

[[email protected] /data/backup]#nl studysed | sed ‘2i 00000000\n1111111‘

     1root:x:0:0:root:/root:/bin/bash

00000000

1111111

     2bin:x:1:1:bin:/bin:/sbin/nologin

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

插入两行内容可用换行符 \n 隔开

替换:

[[email protected] /data/backup]#nl studysed | sed ‘3,5c enjoy study‘

     1root:x:0:0:root:/root:/bin/bash

     2bin:x:1:1:bin:/bin:/sbin/nologin

enjoy study

     6sync:x:5:0:sync:/sbin:/bin/sync

打印到屏幕:

[[email protected] /data/backup]#nl studysed | sed ‘3,5p‘

     1root:x:0:0:root:/root:/bin/bash

     2bin:x:1:1:bin:/bin:/sbin/nologin

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

结合 -n 才好用

[[email protected] /data/backup]#nl studysed | sed -n ‘3,5p‘

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

字符替换(与vim等其他工具用法相同):

[[email protected] /data/backup]#nl studysed | sed ‘s/nologin/system/g‘

     1root:x:0:0:root:/root:/bin/bash

     2bin:x:1:1:bin:/bin:/sbin/system

     3daemon:x:2:2:daemon:/sbin:/sbin/system

     4adm:x:3:4:adm:/var/adm:/sbin/system

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/system

     6sync:x:5:0:sync:/sbin:/bin/sync

[[email protected] /data/backup]#nl studysed | grep root 

     1root:x:0:0:root:/root:/bin/bash

[[email protected] /data/backup]#nl studysed | grep root | sed ‘s/^.*://g‘

/bin/bash

删除其他内容,得到root登录的bash,其中引号内的^表示行首,点.表示任意字符,星号*表示前一字符的零个或任意多个,^.*:表示从行首到冒号:前的所有内容,结合替换语法‘s/^.*://g‘意即将行首到冒号的所有内容替换为空。


不考虑实际意义我们只保留username一下:

[[email protected] /data/backup]#nl studysed | grep root | sed ‘s/:.*$//g‘

     1root

删除(替换为空)了冒号到最后的内容,符号$表示行尾




直接操作文件

-e直接在命令行操作(默认)

-i直接修改文件内容,不显示在屏幕

-n 仅显示被操作的行

-r 扩展正则表达式(默认基础正则表达式)



这里仅试下-i

[[email protected] /data/backup]#sed  ‘s/:.*$//g‘ -i studysed 

[[email protected] /data/backup]#cat studysed 

root

bin

daemon

adm

lp

sync

这样直接修改文件内容



关于扩展正则表达式(没有多加实验,仅做记录备忘):

+   指一个或一个以上前一字符,比如‘s+‘指s,ss,sss,ssss等

?  指零个或一个前一字符,‘s?‘指代空或s

|   指 字符串一或字符串二,‘good|glad ‘指good或glad,可以多个同时使用

() 字符组合符号,‘g(oo|la)d‘同上指good或glad,组合+使用‘g(oo)+‘指选取oo或oooo等一个或多个oo字符串



可能待续技术分享


以上是关于sed 基础用法的主要内容,如果未能解决你的问题,请参考以下文章

sed命令基础及高级用法

linux学习基础6之sed用法详解

sed 基础用法

sed 基础用法

linux学习基础6之sed用法详解

文本处理三剑客之-sed基础用法