男儿欲遂平生志,五经勤向窗前读。这篇文章主要讲述Shell编辑器之sed编辑器相关的知识,希望能为你提供帮助。
@toc
sed编辑器
一、sed概念
- sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
- sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。
- 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
- 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行。
- 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。
三、sed命令格式命令格式:
格式一:
sed [选项] 操作 文件1 [文件2] ...
格式二:
sed [选项] 选项
操作1
操作2
...
文件1 [文件2] ...
- 常用选项:
-e 或--expression=:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用 -f 或--file=:表示用指定的脚本文件来处理输入的文本文件。 -h 或--help:显示帮助。 -n、--quiet 或 silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出。 -i:直接修改目标文本文件。
- 常用操作:
s:替换,替换指定字符。 d:删除,删除选定的行。 a:增加,在当前行下面增加一行指定内容。 i:插入,在选定行上面插入一行指定内容。 c:替换,将选定行替换为指定内容。 y:字符转换,转换前后的字符长度必须相同。 p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。 =:打印行号。 l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\\t)
四、使用sed命令 1、打印内容
sed -n p sed.txt
文章图片
sed = sed.txt
sed -n = sed.txt
这里 = 两边可以不加
文章图片
sed -n l sed.txt
文章图片
sed -n =;
p sed.txt
sed -n -e = -e p sed.txt
文章图片
#方式2的变种,在输出“”后直接回车,然后在“>
”前输出操作,最后以“文件”结尾
sed -n
>
=
>
p
>
sed.txt
文章图片
2、使用地址
- sed编辑器有2种寻址方式:
1、以数字形式表示行区间
2、用文本模式来过滤出行
#打印第一行
sed -n 1p sed.txt
文章图片
#打印最后一行
sed -n $p sed.txt
文章图片
#打印1到3行
sed -n 1,3p sed.txt
文章图片
#打印3到最后一行
sed -n 3,$p sed.txt
文章图片
#打印1之后的连续3行,即1-4行
sed -n 1,+3p sed.txt
文章图片
#输出前5行信息后退出,q表示退出
sed 5q sed.txt
文章图片
#打印奇数行
#第一步:sed读取第一行,p打印出来
#第二步:这里n表示移动到下一行(此时是第二行)
#第三步:sed命令结束,再次切换到下一行(此时是第三行)
#第四步:重复一二三的步骤,直至最后一行
sed -n p;
n sed.txt
#打印偶数行,和上面的步骤差不多
sed -n n;
p sed.txt
文章图片
#从第2行开始执行n和p的操作,也是奇数行
sed -n 2,$n;
p sed.txt
文章图片
#在/etc/passwd文件中过滤出含有root的行,并打印出来,注意大小写
sed -n /root/p /etc/passwd
文章图片
#从/etc/passwd文件中打印以‘r’开头的行,注意大小写
sed -n /^r/p/etc/passwd
文章图片
#从/etc/passwd文件中打印以‘bash’结尾的行,注意大小写
sed -n /bash$/p/etc/passwd
文章图片
#打印文件里包含ftp和root的行
sed -n /ftp\\|root/p /etc/passwd
文章图片
#从第二行开始打印到包含nobody的行
sed -n 2,/nobody/p /etc/passwd
文章图片
#-r表示支持正则表达式
sed -nr /ro1,t/p /etc/passwd
文章图片
3、删除行
#全删
sed d sed.txt
文章图片
#删除第三行
sed 3d sed.txt
文章图片
#删除2到4行
sed 2,4d sed.txt
文章图片
#删除最后一行
sed $d sed.txt
【Shell编辑器之sed编辑器】
文章图片
#删除空行
sed /^$/d sed.txt
文章图片
#删除以e结尾的行
sed /e$/d sed.txt
文章图片
#除了e结尾的都删了,“!”表示取反操作
sed /e$/!d sed.txt
文章图片
#从第一个位置打开行删除功能,到第二个位置关闭行删除功能,按行删除(慎用)
sed /1/,/c/d sed.txt
文章图片
4、替换
格式:
sed [选项] 行范围 s/旧字符串/新字符串/替换标记4种替换标记:
数字:表明新字符串将替换第几处匹配的地方
g:表明新字符串将会替换所有匹配的地方
p:打印与替换命令匹配的行,与-n一起使用
w 文件:将替换的结果写到文件中
文章图片
#将每行的第一个root替换成admin
sed -n s/root/admin/p /etc/passwd
文章图片
#将每行的第二个root替换成admin
sed -n s/root/admin/2p /etc/passwd
文章图片
#将每行的所有root替换成admin
sed -n s/root/admin/gp /etc/passwd
#将每行的所有root删除
sed s/root//g /etc/passwd
文章图片
#1-20行行首添加#号
sed 1,20 s/^/#/ /etc/passwd
文章图片
#在以root开头的行的结尾添加#号
sed /^root/ s/$/#/ /etc/passwd
文章图片
vim script.sed#创建一个用于sed命令的脚本,以sed结尾方便辨识
s/1/11/#将1替换成11,下面以此类推
s/a/zb/
s/555/888/
sed -f script.sed sed.txt
文章图片
#将/etc/passwd中的1-20行输出保存到out.txt文件中
sed -n 1,5w out.txt /etc/passwd
#将/etc/passwd 中的1-20行的开头添加#后保存到out.txt文件中
sed -n 1,20 s/^/#/w out1.txt /etc/passwd
文章图片
翻译字符“\\”的使用
#将/bin/bash替换成/bin/csh
sed -n s/\\/bin\\/bash/\\/bin\\/csh/p /etc/passwd #“\\”是转义字符,用来取消“/”的特殊意义
sed -n s!/bin/bash!/bin/csh!p /etc/passwd#使用“!”作为字符串分隔符
文章图片
推荐阅读
- Intellij 插件 RestfulToolkit#yyds干货盘点#
- Python数据分析基础-3Python的日期和时间及其处理的常用方法
- shell 之awk编辑器
- Linux之find xargs
- Shell脚本之免交互(EOFExpect)
- JAVA SE—— 数组(详细!!!)
- Java Record 的一些思考 - 序列化相关
- netty系列之:选byte还是选message?这是一个问题
- MySQL面试10道不得不会的MySQL基础面试题