sed编辑器
- sed编辑器
- sed基础语法
- sed查询
- sed删除
- sed 替换
- sed 插入
sed编辑器
- sed是文本处理工具,依赖于正则表达式,可以读取文本内容,工具指定条件对数据进行添加、删除、替换等操作,被广泛应用于shell脚本,以完成自动化处理任务。
- sed在处理数据时默认不直接修改原文件,而是把当前处理的行存储在临时缓存区中,所有指令都在缓冲区中操作,处理完成后,把缓冲区内容默认输出到屏幕,接着处理下一行内容,这样不断重复,直到文件末尾,文件本身内容没有改变
- sde是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
- 编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。
sed基础语法
-
命令语法:
- sed 选项 ‘编辑命令’ 文件1 文件2
-
常用选项
选项 | 作用 |
---|---|
-e | 指定要执行的命令,只有一个编辑命令时可省略。 |
-n | 只输出处理后的行,读入时不显示 |
-i | 直接编辑文件,而不输出结果 |
-f | 表示用指定的脚本文件来处理输入的文本文件 |
-h | 显示帮助 |
-
编辑指令格式:
- 【地址1】 【,地址2】 操作 【参数】
- 与grep一样,Sed在文件查找是也可以使用正则表达式和各种元字符。这里的“地址”就可以是正则表达式,也可以是数字、$,如果没有地址就代表是所有的行。
-
常用的“操作”及作用
指令 | 作用 |
---|---|
p | 输出指定的行 |
d | 删除指定的行 |
s | 字串替换,格式:‘行范围 s/旧字符串/新字符串/g’ |
r | 读取指定文件 |
w | 保存为文件 |
i | 插入,在当前行前面插入一行或多行 |
a | 插入,在当前行下面插入一行或多行 |
q | 表示退出 |
H | 复制 |
G | 粘贴 |
sed查询
-
sed -n ‘行号p’ :查看指定行信息
-
sed ‘5q’ :打印前5行信息后退出,q表示退出
-
sed -n ‘行1,行2p’ :查看从行1到行2的信息
-
sed -n ‘行1,+np’ :查看行1及行1后的n行信息
-
sed -n ‘3 {p;n;n;p}’ :n可以帮我们实现换行,p实现打印
-
sed -n ‘/字符串/ p’ :打印包含字符串的行
-
sed -n ‘/正则表达式/ p’ :打印所有包含正则能够匹配到的内容的行
使用演示:
sed -n ‘行号p’ :查看指定行信息
sed -n ‘行1,行2p’ :查看从行1到行2的信息
sed -n ‘行1,+np’ :查看行1及行1后的n行信息
sed -n ‘3 {p;n;n;p}’ :n可以帮我们实现换行,p实现打印
sed -n ‘/字符串/ p’ :打印包含字符串的行
sed -n ‘/正则表达式/ p’ :打印所有包含正则能够匹配到的内容的行
sed删除
sed ‘行号 d’ : 删除指定行号的行
sed ‘行1,行2 d’ : 删除行1与行2之间的行
sed ‘/字符串/ d’ :删除包含字符串的行
sed ‘/正则表达式/ d’ :删除所有包含正则能够匹配的到的内容的行
sed ‘行号,/字符串/ d’ :删除从指定行到第一个包含字符串的行
sed ‘/字符串1/,/字符串2/ d’ :从第一个字符串1的行开始删除到 第一个扫描到的字符串2的行,之后会继续扫描包含字符串1的行,然后继续执行删除和扫描字符串2的操作
使用演示:
sed ‘行号 d’ : 删除指定行号的行
sed ‘行1,行2 d’ : 删除行1与行2之间的行
sed ‘/字符串/ d’ :删除包含字符串的行
sed ‘/正则表达式/ d’ :删除所有包含正则能够匹配的到的内容的行
sed ‘行号,/字符串/ d’ :删除从指定行到第一个包含字符串的行
sed ‘/字符串1/,/字符串2/ d’ :从第一个字符串1的行开始删除到 第一个扫描到的字符串2的行,之后会继续扫描包含字符串1的行,然后继续执行删除和扫描字符串2的操作
sed 替换
- sed ‘s/旧字符/新字符/’ :替换每行匹配到的第一个旧字符
- sed ‘s/旧字符/新字符/n’ : 替换每行匹配到的第n个旧字符
- sed ‘s/旧字符/新字符/g’ :替换每行匹配到的所有旧字符
- sed ‘s/旧字符/新字符/w file’ :把替换后的行内容保存到指定文件
- sed -n ‘s/旧字符/新字符/gp’ > file
- sed ‘行号 s/旧字符/新字符/’ : 替换指定行的第一个匹配到的的字符串 最后加上g就是替- 换所有匹配到的旧字符
- sed ‘行1,行2 s/旧字符/新字符/g’ :替换行1与行2区间的匹配行的对应的字符串
- sed ‘/字符串/ s/旧字符/新字符/g’
- sed ‘/正则表达式/ s/旧字符/新字符/g’
- s/xx/xx/:后面的替换分隔符可以使用其他字符代替,需要确保三个分隔字符保持一致
- sed ‘行号c xxxx’ 替换指定行的整行内容
- sed ‘y/abc/123/’ 替换所有相对应的字符功能类似tr
使用演示:
== sed ‘s/旧字符/新字符/替换选项’ 替换选项可以指定第几个旧字符进行替换,g表示全行替换==
sed ‘s/旧字符/新字符/w file’ :把替换后的行内容保存到指定文件
== sed -n ‘s/旧字符/新字符/gp’ > file ==
sed ‘行号 s/旧字符/新字符/’ : 替换指定行的第一个匹配到的的字符串 最后加上g就是替- 换所有匹配到的旧字符
sed ‘行1,行2 s/旧字符/新字符/g’ :替换行1与行2区间的匹配行的对应的字符串
sed ‘/字符串/ s/旧字符/新字符/g’
sed ‘/正则表达式/ s/旧字符/新字符/g’
s/xx/xx/:后面的替换分隔符可以使用其他字符代替,需要确保三个分隔字符保持一致
sed ‘行号c xxxx’ 替换指定行的整行内容
sed ‘y/abc/123/’ 替换所有相对应的字符功能类似tr
sed 插入
-
sed ‘行号i xxxx’ :在指定行上面插入xxxx
-
sed ‘行号a xxxx’ :在指定行下面插入xxxx
-
sed ‘行号r file’ :在指定行下面读取文件内容
-
sed ‘/root/{H;d};$G’ /etc/passwd :将包含root的行剪切到末尾,H表示复制;G表示粘贴
-
sed ‘1,2H;3,4G’ /etc/passwd :将1到2行复制到3和4行下面
-
echo “111222333” | sed -r ‘s/(111)(222)/\2\1/’ :将字符111和222互换位置
使用演示:
sed ‘行号i xxxx’ :在指定行上面插入xxxx
sed ‘行号a xxxx’ :在指定行下面插入xxxx
sed ‘行号r file’ :在指定行下面读取文件内容
sed ‘/行数/{H;d};$G’ :将指定行剪切到末尾,H表示复制;G表示粘贴
sed ‘1,2H;3,4G’ :将1到2行复制到3和4行下面
echo “111222333” | sed -r ‘s/(111)(222)/\2\1/’ :将字符111和222互换位置