sed
sed是一种非交互式的流编辑器,默认情况下,sed并不是改变源文件本身,而只是对流经sed命令的文本进行修改,并将修改后的结果,打印到标准输出中,所以sed只是对流进行操作,并不会改变源文件。sed处理文本是以行为单位的,每处理完一行,立刻打印出来,然后再处理下一行,直到全文处理结束。sed可做的编辑操作有,删除,查找,替换,添加,插入,从其他文件中读入数据。
sed的基本用法
1.使用sed修改文件流的方式
sed [参数] 'sed的命令集' file
例子:将this改成that的同时,将line改成LINE
sed -e 's/this/that/g' -e 's/line/LINE/g' xuejiao_lin.txt
也可以是用分号进行改写
sed -e 's/this/that/g' ; 's/line/LINE/g' xuejiao_lin.txt
2.sed的删除操作
使用d命令可以删除指定的行
例子:将file的第一行删除后输出到屏幕
sed '1d' xuejiao_lin.txt
由于sed默认不修改源文件,如果希望保存修改后的源文件,需要重定向
sed '1d' xuejiao_lin.txt > saved_file
如果想直接修改文件,使用-i参数
sed -i '1d' file //直接修改源文件,不会有输出
删除指定范围的行(第一行到第五行)
sed '1,5d' xuejiao_lin.txt
删除第一行到最后一行
sed '1,$d' xuejiao_lin.txt
删除最后一行
sed '$d' xuejiao_lin.txt
删除指定范围的行,只保留第五行
sed '5!d' xuejiao_lin.txt
删除所有空行
sed '/^$/d' xuejiao_lin.txt
删除所有含有empty的行
sed '/empty/d' xuejiao_lin.txt
3.sed的查找替换
使用s命令可将查找到的匹配文本内容替换为新的文本
s命令用于文本替换,使用LINE替换line(注意每一行只有第一个line被替换,默认情况下只替换第一次匹配到的内容
sed 's/line/LINE/' xuejiao_lin.txt
要想每行最多匹配两个line,并改称LINE
sed 's/line/LINE/2' xuejiao_lin.txt
sed 使用g可以完成所有匹配值的替换
sed 's/line/LINE/g' xuejiao_lin.txt
只替换开头的this
sed 's/^this/LINE/' xuejiao_lin.txt
4.字符替换
使用y命令进行字符替换,将一系列字符逐个换成另外一系列字符(注意替换的字符的长度一定要相同,否则不能使用sed)
1换A,2换B,3换C,4换D
sed 'y/1234/ABCD/' xuejiao_lin.txt
5.插入文本
使用i或a插入文本,i代表在匹配行之前插入,a代表在匹配行之后插入
使用i在第二行之前插入
sed '2 i Insert' xuejiao_lin.txt
使用a在第二行之后插入
sed '2 a Insert' xuejiao_lin.txt
在匹配行的上一行插入
sed '/Second/i\Insert' xuejiao_lin.txt
6.读入文本
使用r命令可从其他文件中读取文本,并插入匹配行之后
将/etc/passwd中的内容独处放到xuejiao_lin.txt空行之后
sed '^$/r /etc/passwd' xuejiao_lin.txt
7.打印
使用p命令可进行打印,这里使用sed命令时,一定要加上-n 表示不打印没关系的行
打印出指定的行
sed -n '1p' xuejiao_lin.txt