前言
- sed是一种几乎包括再所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
- cut awk 是进列截取,grep是行截取的。
vim也是编辑器,sed也是一个编辑器,有了vim为什么还要学习sed命令那??? vim只能修改文件。Sed不光可以修改文件的内容,还可以直接修改命令的结果。在shell编程中比较重要。也可以进行管道符操作。
1. sed的使用
命令: sed [选项] '[动作]' 文件名
选项:
-n 一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕。
-e 允许对输入数据应用多条sed命令编辑
-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a \ 追加,再当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要“\”代表数据未完结
c \ 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
i \ 插入,再当期行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结
d 删除,删除指定的行。
p 打印,输出指定的行。
s 字串替换,用一个字符串替换另外一个字符串。格式为"行范围s/旧字串/新字串/g"(和vim中的替换格式类似)。
开始举个栗子:
1.1 打印
- 命令:
sed '2p' student
作用:参看文件第二行
解决出现的问题: 把第二行输出了两遍。又把整个文件都输出了一遍。只想看到第二行不想看多余数据,这是就要用-n。
1.2 打印改进版(-n)
- 命令:
sed -n '2p' student
作用:上面的改进版本,不让他显示多余的行
1.3 删除行
注意: Sed命令只要不加-i选项,它的所有的操作都不影响文件本身,只是影响的是屏幕输出。
- 命令:sed ‘2,4d’ student
作用:删除第二行到第四行的数据,但不修改文件本身
提示: 如果没有加-i选项的话,操作的仅仅是文件的输出,而不是文件本身的内容。
1.4追加
- 命令:
sed '2a hello' student
作用:在第二行后追加hello
1.5 插入
命令: sed '2i hello' \ world' student
作用:在第二行下面插入两行数据
1.6 行替换
- 命令:
sed '2c No such person' student
作用:数据替换
1.7 字串替换(-i)
- 格式:
sed '行范围s/旧字符串/新字串/g' 文件名
命令:sed '3s/100/60/g' student
作用:在第三行中,把74换成99
1.8 多条命令同时执行(-e)
- 命令:
sed -e 's/zhang/qian/g;s/li/guo/g' student
作用:把zhang替换成qian,把li替换成guo,-e 允许对输入数据应用多条sed命令编辑
2. 总结
- sed主要操作的是处理命令的输出,不需要写入文件 (因为加入-i选项会导致直接修改源文件,从而会导致不安全) ,如果要写入文件,最好还是使用vim编译器来进行修改。