sed的用法

目录

sed概念

sed的命令格式

操作选项

操作符

打印功能

寻址打印

过滤文本

面试题:

sed的删除操作

匹配字符串来删除行

免交互删除空行的三种方式

sed的替换

替换字符串

字母大小写转换

整行替换

面试题:免交互替换ip地址

单字符替换

去掉文件dhcpd.conf中#ddns-开头的行的#号

去掉所有被注释行开头的#号

把文件中所有单词的首字母设为大写

sed插入文本内容

使用sed对字符串和字符的位置进行互换

面试题 免交互提取数字


sed概念

grep 就是查找文本当中的内容,扩展正则表达式

sed是一种流编辑器,一次处理一行内容

如果只是展示,会放在缓冲区(模式空间),展示结束之后,会从模式空间把操作结果删除。

一行一行处理,处理完当前行,才会处理下一行。直到文件末尾。

sed的主要作用就是对文本的内容进行增删改查,其中最好用,最强大的是改和增

sed的命令格式

sed -e '操作符' -e ‘操作符’  文件1 文件2

-e表示可以跟多个操作符,只有一个操作,-e可以省略

sed -e '操作符1;操作符2'  文件1 文件2

操作选项

sed -e  用于执行多个操作命令

sed -f  在脚本中定义好操作符,然后根据脚本内容的操作符对文件进行操作

sed -i  直接修改目标文件(慎用)

sed -n 仅显示scrip处理后的结果(不加-n,sed会有两个输出结果;加了-n 之后会把默认输出屏蔽,只显示一个结果)

操作符

p:打印结果

r:使用扩展正则表达式

s:替换,替换字符串

c:替换。替换行

y:替换,替换单个字符,多个字符替换必须和替换内容的字符长度保持一致

d:删除,删除行

a:增加,在指定行的下面一行插入内容

i:增加,在指定行的上面一行插入内容

打印功能

sed -n 'p' 

寻址打印 sed -n '=;p' 打印所有的行

               sed -n '4p'  打印指定的行

               sed -n '$p'  打印最后一行    

               sed  -n '2,$p'  打印行号范围 打印第二行到最后一行

               sed -n '2p;$p' 打印第2行和最后一行

               sed -n  'p;n'  打印奇数行

               sed -n  'n;p'  打印偶数行

寻址打印

寻址打印:按照指定行来打印(以下都省略要操作文件,只写操作符)

sed -n '=' 			#只显示行号
sed -n '=;p' 		#显示行号和内容(行号和内容分行显示)
sed -n '4p' 		#打印第四行
sed -n '$p'			#打印最后一行
sed -n '2,4p'		#打印第2行到第4行
sed -n '2p;$p'		#打印第2行和最后一行
sed -n 'p;n'		#打印奇数行
sed -n 'n;p'		#打印偶数行,引号中的n表示跳过一行,打印下一行
过滤文本

文本内容进行过滤  sed -n '/o/p'  test.txt  过滤并打印包含o 的行

sed -n '/o/p' 		#过滤并打印包含o的行,使用//进行匹配

使用正则表达式对文本内容进行过滤

sed -n '/^root/p' /etc/passwd  查找passwd以root开头的行

sed -n '/^root/p'	#过滤并打印以root开头的行
sed -n '3,/bash$/p'	#从第三行开始打印,直到打印出第一个以bash结尾的行为止

从指定行开始,打印到第一个以bash结尾的行

sed -n '3,/bash$/p' /etc/passwd

扩展正则 :sed -rn  

sed -rn '/(99:){2,}p' /etc/passwd 查找passwd有2个99的行

要么以root为开头,要么以bash为结尾的行 sed -rn '/^root|bash$/p' /etc/passwd

sed -rn '/^root|bash$/p' /etc/passwd
面试题:

如何免交互删除文本内容,不删除文件

1.sed -i 'd' 文件名

2.cat /dev/null  > test1.txt

sed的删除操作

sed -n '3d;p'  删除指定的第三行并打印剩余的行

sed -n '5,$d;p' 删除第五行到最后一行并打印剩余的行

sed -n '1!d;p' 取反,除了第一行其他的都删除

sed -n '4,6!d;p'除了第四行到第六行其他的都删除

sed -n '4p;6!d;p' 111.txt 除了第四行和第六行,其他的都删除

sed -n '/o/p' 删除o的行并打印其他行

sed -n '/o/!d' 除了o的其他都删除

sed -n '3d;p' 		#删除指定的行,删除第3行,打印剩余的行
sed -n '5,$d;p'		#删除第5行到最后一行,打印剩余的行
sed -n '1!d;p'		#除了第1行,其他行全部删除,打印剩余的行
sed -n '4,6!d;p'	#除了4-6行,其他行全部删除,打印剩余的行

匹配字符串来删除行
sed '/o/d'			#删除包含o的行
sed '/one/,/six/d'	#删除包含one的行到包含six的行
免交互删除空行的三种方式

grep -v "^$" test.txt

cat tets.txt | tr -s "\n"

sed '/^$/d' test.txt

sed的替换

替换字符串

sed -n 's/root/test/2p' /etc/passwd  把第二个root替换成test

sed -n 's/root/test/gp' /etc/passwd  把所有的root替换成test

sed -n 's/^/#/p' 把所有行都注释

sed -n '4,6s/^/#/p' 111.txt 把第四行到第六行注释

sed -n '4s/^/#/p;6s/^/#/p' 111.txt 把第四行和第六行注释

sed 's/a/b/p' filename		#把文件中每行的第一个a换成b,并打印输出
sed 's/a/b/2p' filename		#把文件中每行的第二个a换成b,并打印输出
sed 's/a/b/gp' filename		#把文件中每行的所有a换成b,并打印输出
sed 's/^/#/p' filename		#注释文件的每一行
sed '4s/^/#/p' filename		#注释文件的第4行
sed '4-6s/^/#/p' filename	#注释文件的第4到6行
字母大小写转换

(u&小写变成大写  l&大写变成小写)

sed  's/[a-z]/\u&/' test.txt (首字母小写变成大写)

sed 's/[a-z]/\u&/g'  test.txt  (所有字母都变成大写)

sed 's/[A-Z]/\l&/' 111.txt   (把首字母大写变成小写)

sed 's/[A-Z]/\l&/g' 111.txt  (所有字母都变成小写)

sed 's/[a-z]/\u&/' filename	#转换首字母为大写
sed 's/[a-z]/\u&/g' filename	#转换全部小写字母为大写
sed 's/[A-Z]/\l&/g' filename	#转换全部大写字母为小写
整行替换

sed '/11/c wo zhen de shuai'  test.txt  把11正好替换

sed '/整行内容/c 要替换的内容' filename		#整行内容替换
面试题:免交互替换ip地址

sed '/IPADDR=192.168.233.10/c IPADDR=192.168.233.100' /etc/sysconfig/network-scripts/ifcfg-ens33

单字符替换

sed 'y/one/111/' test.txt 把包含one的都替换成111 对应变

sed 'y/one/123/' filename		

去掉文件dhcpd.conf#ddns-开头的行的#号

sed -r 's/#(ddns.+)/\1/' dhcpd.conf

去掉所有被注释行开头的#号

sed -r 's/#(.+)/\1' filename

把文件中所有单词的首字母设为大写

sed -r 's/\b[/S]/\u&' filename
sed插入文本内容

sed '/three/a  lll ' test.txt  行下插入新的内容

sed '/three/i  lll' test.txt  行上插入新的内容

sed 'three/r  test1.txt'  test.txt 读取其他文件的内容,在第三行下面插入

sed '$a kuku' test.txt  在最后一行插入新的内容

sed '$i kuku' test.txt  在倒数第二行插入新的内容

sed '$r test1.txt' test.txt 读取其他文件的内容,然后插入到对象文件的最后一行

sed '/目标行内容/a 插入的内容' file		#在file的目标行下行插入内容
sed '/目标行内容/i 插入的内容' file		#在目标行上行插入内容
sed '/目标行内容/r 插入的文件' file		#在目标行下行插入文件的内容
sed '$a 插入的内容' file		#在最后一行下行插入内容
sed '$i 插入的内容' file		#在最后一行上行插入内容(倒数第二行)
sed '$r 插入的文件' file		#在最后一行下行插入文件的内容
使用sed对字符串和字符的位置进行互换

sed -r 's/(ge)(fang)(wen)/\3\1\2/'

echo 真的帅 | sed -r 's/(.)(.)(.)/\3\2\1/'

sed -f 123.txt  456.txt 脚本内容替换

echo aabbcc | sed -r 's/(aa)(bb)(cc)/\3\1\2/'
ccaabb
面试题 免交互提取数字

grep -E '"[0-9]+\."  test.txt

cat 123.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'

打印指定时间日志

sed -n '/Jun 21 09:12:14,/Jun 21 12:00:01/p’   /var/log/messages

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值