Linux sed命令

1、什么是sed?
sed是一种非交互式的流式编辑器,在shell脚本和Makefile中作为过滤器使用也是非常普遍的。
sed处理文本的时候按行为基本单位进行处理的,grep只有‘查’的功能,但sed就可以增删查改。sed使用的时候是有风险的,可能会因为我们输入错误信息导致文本被更改,所以使用sed的时候需要谨慎处理。
把前一个程序的输出作为sed的输入,经过一系列的编辑命令转换为另一种格式输出。sed常用来配合正则表达式的使用,处理时,把当前处理的行存储在临时缓冲区中,把这个空间称为模式空间;接着用sed命令处理缓冲区中的内容,处理完成后把缓冲区中的内容运往屏幕。再接着处理下一行,这样不断重复一直文件的末尾。sed主要是用来自动编辑一个或多个文件,简化对文件的反复操作编写转换程序等。

sed的使用原理:
我们先拿到的是第一个文件的第一行,在该行中使用正则表达式匹配当前行是否符合条件。符合的话就执行,否则不执行。然后就在以相同的方式来处理下一行的内容,一直循环处理。sed处理多个文件的时候,是对每个文件都执行相同的操作。

2、sed命令
sed命令行的基本格式:

sed option ‘script’ file1 file2
sed option -f scriptfile file1 file2

sed处理的文件既可以由标准输入重定向得到么,也可以当命令行参数传入,命令行参数可以一次传入多个文件,sed会依次处理。sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件然后用-f参数指定。编辑命令的格式为:/pattern/action
其中pattern是正则表达式,action是编辑操作。sed程序一行一行读出待处理文件,如果某一行与pattern匹配,则执行相应的结果action。如果没有pattern只有action,那么这个action将会作用处理这个文件中的每一行。

下面看一下具体的选项和命令
选项:

-e:表示以选项中指定的script来处理输入的文件,也就是可以对输入执行多条指令的意思。
-f :表示以选项中的script文件来处理输入的文本文件,也就是把sed指令可以写在文件中。
-n:表示仅仅显示sed的command处理完后的结果


命令:

a:表示在当前行下面插入文本。
i :表示在当前行的上面插入文本。
c:表示把选定的行改为新的文本。
d:表示删除经过pattern匹配所选中的行。
D:表示删除模式空间中的第一行。
s:表示替换指定的字符。
p:表示打印模式空间中的所有行。
P:表示只打印模式空间中的第一行。
q:表示退出sed。
b label:表示跳转到脚本中带有标记label的地方,如果标记不存在则跳转到脚本的末尾。
r file:表示从file中读取一行。

3、sed的用法
在说sed之前我们先来说一下模式空间和保持空间,上面提到过模式空间。
保持空间:用来存储数据相当于一个仓库,不能对数据进行处理
模式空间:专门以行为单位对数据进行处理
一般情况下,如果不显示的使用一些选项,是不会用到保持空间。

g:将保持空间的内容拷贝到模式空间中,会将模式空间原来的值覆盖掉。
G:将保持空间的内容追加到模式空间中。
h:将模式空间的值拷贝到保持空间,会将保持空间原来的值覆盖掉。
H:将模式空间的值追加到保持空间中。
d:删除模式空间的所有行,并读下一行到模式空间。
D:删除模式空间的第一行,不读下一行到模式空间。
n:输出模式空间的行,读取下一行替换当前模式空间的行,接着执行下一条处理命令而不是第一条命令。
N:读入下一行,追加到模式空间行后面,此时模式空间中有两行。
x:交换模式空间和保持空间的内容。

1、输出第三到第五行的内容(数字定址)
Linux sed命令_第1张图片
2、把第二行替换成给定的‘hello’
Linux sed命令_第2张图片
3、把以字符开头的行中的字符‘h’替换成‘new’
Linux sed命令_第3张图片
4、不打印以字符开头的行
Linux sed命令_第4张图片
5、打印一行后空一行
Linux sed命令_第5张图片
6、倒着打印每一行的内容
Linux sed命令_第6张图片
7、将列序列转换成行序列
Linux sed命令_第7张图片
8、倒序输出上面1~10的序列
Linux sed命令_第8张图片
9、求1~100的和
Linux sed命令_第9张图片

你可能感兴趣的:(Linux,linux学习历程)