sed编辑器

sed

grep 最强大的功能,正则表达式

sed 是一种流编辑器,一次处理一行内容。会放在缓冲区(模式空间),展示结束之后,会从模式空间把操作结果删除。

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

sed的命令格式及操作选项:

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

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

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

选项:

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

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

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

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

操作符:

p:打印结果

r:使用扩展正则表达式

s:替换,替换字符串

c:替换,替换指定行

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

d:删除,删除行

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

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

r:在行后增加文本内容

$a:在最后一行插入内容

$i:在倒数第二行插入内容

$r:读取其他文件的内容,插入到对象文件的最后一行

打印功能:

bash 复制代码
sed -n 'p' test.txt  #默认打印方式
sed -n '=;p' test.txt	#显示行号
sed -n '4p' test.txt	#寻址打印,按照指定的行打印
sed -n '$p' test.txt	#打印最后一行
bash 复制代码
sed -n '2,4p' test.txt		#打印2-4行
sed -n '2p;4p' test.txt		#打印第2行和第5行
sed -n	'p;n' test.txt		#打印奇数行
sed -n	'n;p' test.txt		#打印偶数行
#这里的n就是next的意思,n在p前面,跳过一行,打印下一行,就是偶数行﹔在后面,就是打印第一行,然后跳过一行,形成奇数行

对文本内容进行过滤:

bash 复制代码
#过滤并打印包含o的行
sed -n '/o/p' test.txt	
#使用正则表达式对文本内容进行过滤
sed -n '/^root/p' /etc/passwd	
#从指定行开始,打印到第一个以bash为结尾的行
sed -n '3,/bash$/p' /etc/passwd
bash 复制代码
#扩展正则表
sed -rn '/(99:){2,}/p' /etc/passwd 
#要么以root未开头,要么以bash为结尾的行
sed -rn '/^root|bash$/p' /etc/passwd

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

bash 复制代码
sed -i 'd' test1.txt
cat dev/null > 文件名

sed的删除操作:

bash 复制代码
#删除第三行,打印剩余的行
sed -n '3d;p' test.txt
#删除5-最后一行
sed -n '5,$d;p' test.txt
#除了第一行全部删除
sed -n '1!d;p' test.txt
#除了第四行到第六行,其他全部删除
sed -n '4,6!d;p' test.txt
#匹配字符串删除行
sed '/one/,/six/d' test.txt
#如何面交互的删除空行
sed '/^$/d' test.txt
grep -v '^$' test.txt
cat test.txt | tr -s "\n"

替换字符串

bash 复制代码
sed -n 's/原字符/替换后的字符/p' /etc/passwd	 #替换第一个
sed -n 's/原字符/替换后的字符/2p' /etc/passwd #替换第2个
sed -n 's/原字符/替换后的字符/gp' /etc/passwd	#替换全局
bash 复制代码
#把内容注释掉
sed -n 's/^/#/p' test2.txt
#把4-6行注释掉
sed -n '4,6 s/^/#/p' test2.txt
#把4和6行注释掉
sed -n '4s/^/#/p;6s/^/#/p' test2.txt
#把首字母变成大写	u&转换首字母大写的特殊符号,\转义符
sed 's/[a-z]/\u&/' test2.txt
#全部变成大写
sed 's/[a-z]/\u&/g' test2.txt
#把大写转换成小写	l&转换首字母大写的特殊符号,前面加\转义符
sed 's/[A-Z]/\l&/' test.txt

整行替换

bash 复制代码
sed '/one/c dn hello' test2.txt
sed '/IPADDR=192.168.233.30/c IPADDR=192.168.233.100' /etc/sysconfig/network-scripts/ifcfg-ens33 

单字符替换

bash 复制代码
sed 'y/one/111/' test2.txt

增加

bash 复制代码
#在下一行增加xxx
sed '/three/a xxx' test2.txt
#在上一行增加xxx
sed '/three/i xxx' test2.txt
#读取其他文件内容,添加在下一行
sed '/three/r xxx.txt' test2.txt
bash 复制代码
#在最后一行插入xxx
sed '$a xxx' test2.txt
#在倒数第二行插入xxx
sed '$i xxx' test2.txt
#读取其他文件的内容,插入到对象文件的最后一行
sed '$r xxx.txt' test2.txt

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

bash 复制代码
echo chenqianshuai | sed -r 's/(chen)(qian)(shuai)/\3\1\2/'

字符位置互换

bash 复制代码
echo 葫芦娃 | sed -r 's/(.)(.)(.)/\2\3\1/'

sed的主要作用就是对文本的内容进行增删改查,最强大的功能是增和改
习题

bash 复制代码
#提取文件中的版本号
cat test.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
cat test.txt | egrep  '[0-9]+\.'
bash 复制代码
#指定时间范围内的日志
cat /var/log/messages | sed -n '/^Jun 21 10:50:01/,/Jun 21 12:01:01/p'
相关推荐
一颗青果2 小时前
HTTP协议详解
linux·网络·网络协议·http
Dreamboat-L5 小时前
云服务器上部署nginx
java·服务器·nginx
广州灵眸科技有限公司5 小时前
瑞芯微(EASY EAI)RV1126B CAN使用
linux·网络·单片机·嵌入式硬件
咕噜签名-铁蛋6 小时前
AI扣子:重构人机交互的智能连接点
服务器
AI科技星7 小时前
张祥前统一场论宇宙大统一方程的求导验证
服务器·人工智能·科技·线性代数·算法·生活
魂万劫7 小时前
如何在虚拟机VM上|Linux环境内安装windows
linux·运维·服务器·windows
序属秋秋秋8 小时前
《Linux系统编程之进程控制》【进程等待】
linux·c语言·c++·进程·系统编程·进程控制·进程等待
zfj3218 小时前
top 命令中的 wa (IO wait) 指标,理论上几乎完全是由磁盘IO(包括swap)引起的,而不是网络IO
linux·网络·top·iowait
Xの哲學8 小时前
Linux网卡注册流程深度解析: 从硬件探测到网络栈
linux·服务器·网络·算法·边缘计算
不哦罗密经8 小时前
python相关
服务器·前端·python