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命令基本使用的主要内容,如果未能解决你的问题,请参考以下文章