sed命令基本使用

Posted goujinyang

tags:

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

1、sed简介

sed是stream editor(流编辑器得缩写),用来处理Linux系统中的文件文本;

2、sed如何处理文件

sed是一行一行读取文件内容并进行处理,最后将处理结果输出到屏幕;

技术图片

  1、首先sed将一行一行读取文件内容,并将其保存到临时一个缓冲区(也称模式空间);

  2、然后将根据需求处理临时缓冲区中的内容,完成之后输出到屏幕;

sed不加 -i 选项时默认只对缓冲区中得文本进行编辑,并不会对源文件进行修改;

3、sed基本使用操作

sed有两种语法格式分别是命令行模式和脚本模式

  一、命令行模式

  a)语法格式

  sed [选项] ‘处理动作‘ 文件名称

  常用选项

 

    -e  进行多项多次编辑

    -n  取消默认输出  #不自动打印临时缓存区内容

    -r  使用扩展正则表达式

    -i  对源文件进行编辑  #不要与-n一起使用

    -f  指定sed脚本得文件名

  常见处理动作

    sed中使用动作时都需要在单引号中

    ‘p‘  打印

    ‘i‘  指定行之前插入内容  #相当于vim中O

    ‘a‘  指定行之后插入内容  #相当于vim中o

    ‘c‘  替换指定行所有内容

    ‘d‘  删除指定行

  示例  

vim 1.txt
aaaaaaaaaaa
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
192.168.101.1

  b)对文件进行增、删、改、查操作

    打印内容

sed -n p 1.txt   #打印文件每一行,并取消默认输出
sed -n 1p 1.txt   #打印第一行
sed -n 3,5p 1.txt   #打印3-5行
sed -n $p 1.txt  #打印末尾行

    增加文件内容

sed $ahhhhhh 1.txt   #在文件末尾行下增加hhhhhh内容
sed ahhhhhh 1.txt   #在文件每行下增加内容
sed 3ahhhhhh 1.txt   #在文件第3行下增加内容
sed $ihhhhhh 1.txt   #在文件末尾行上一行增加内容
sed 3ihhhhhh 1.txt   #在文件第3行上一行增加内容
sed /^mail/ihhhhhh 1.txt  #在mail开头得行上一行增加内容

    修改文件内容  # c 替换整行内容   

sed 5chhhhhh 1.txt   #替换文件第5行内容为hhhhhh
sed chhhhhh 1.txt   #替换文件所有内容每行为hhhhhh
sed 1,5chhhhhh 1.txt   #替换1-5行所有内容
sed /^mail/chhhhhh 1.txt  #替换以mail开头行得内容

    删除文件内容

sed 5d 1.txt   #删除文件第5行内容
sed 1,9d 1.txt   #删除文件1-9行内容
sed /[0-9]/d 1.txt   #删除文件中包含数字得内容
sed -r /([0-9]{1,3}.){3}[0-9]{1,3}/d 1.txt  #删除文件中有IP得内容 加r支持扩展正则
sed $d 1.txt   #删除文件末尾行

  c)对文件进行检索替换操作

  语法:sed ‘s/搜索得内容/替换得内容/动作‘ 处理得文件

  s表示search搜索,/表示分隔符,也可以自己定义使用@或#,动作一般是打印p或全局替换g

sed -n s/mail/MAIL/p 1.txt   #将文件中mail替换为MAIL
sed -n s/mail/MAIL/gp 1.txt   #将文件中全部mail替换为MAIL
sed s//sbin/nologin/test/gp 1.txt   #将文件中/sbin/nologin替换为test
sed s@/sbin/nologin@test@gp 1.txt   #以@为分隔符替换
sed 9s@/sbin/nologin@test@gp 1.txt   #替换文件第9行/sbin/nologin为test
sed -n 1,5s/^/#/p 1.txt  #注释文件第1-5行

  其他命令

    r  从另外文件中读取内容

    w  内容另存为

    &  保存查找串以便替换串中使用  和()相同

    =  打印行号

    !  对所选行以外所有行应用命令,放到行数后

    q  退出

sed 3r /etc/hosts 1.txt   #从/etc/hosts文件中读取内容到1.txt文件中
sed 1,5w 11.txt 1.txt     #将1.txt文件中1-5行内容保存到11.txt文件中
sed -r /([0-9]{1,3}.){3}[0-9]{1,3}/w 12.txt 1.txt  #将1.txt文件中IP地址得行保存到12.txt文件中
sed -n 1,5s/^/#/p 1.txt   #注释1-5行
sed -n s/^sync/#&/gp 1.txt  #注释以sync开头得行
sed -ne /mail/p -ne /mail/= 1.txt   #打印含有mail得行并打印行号  e选项进行多项编辑
sed -n /mail/=;/mail/p 1.txt   #分号也可多项编辑
sed -n 1,5!p 1.txt   #打印1-5行以外得行
sed -e ‘5ihhhhhhhh‘ -e ‘8atest‘ 1.txt -e ‘5=;8=‘  #在第五行前和第8行后插入内容,并打印5、8行号

  d)结合正则使用

    sed 选项 ‘sed命令或者正则表达式或者地址定位‘ 文件名

    1、地址定位用于决定对哪些内容进行编辑,地址形式可以是数字、正则表达式或者二者得结合

    2、如果没有地址定位,sed将对所有行进行处理

正则 说明 备注
/key/ 查询包含关键字得行 sed -n ‘/mail/p‘1.txt
/key1/,/key2/ 匹配包含两个关键字之间得行 sed -n ‘/^root/,/^mail/p‘ 1.txt
/key/,x 匹配关键字得行到文件第x行得内容,包括关键字所在得行 sed -n ‘/mail/,7p‘ 1.txt
x,/key/ x行开始到关键字匹配得行  
x,y 匹配x到y行  加感叹号取反  
/key/! 匹配不包含key得行  

  二、脚本模式

    用法

# sed -f scripts.sed file
建议使用    ./sed.sh file

脚本第一行写
#!/bin/sed -f
1,5d
s/mail/MAIL/g
3ihhhhh
a666666
p


     

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

sed的使用和基本操作命令

sed命令基本使用

sed命令基本使用

Linux基本命令之sed

文本三剑客☞sed

sed教程之基本命令