Shell脚本的学习&&sed
Shell脚本的学习&&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将作用于待处理文件的每一行。
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,将缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;sed默认按照Basic规范基本匹配。
三、基本使用
(1)/pattern/p:打印匹配的行
sed是把待处理文件的内容联通处理结果一起输出到标准输出,即p命令表示除了把文件内容打印出来之外还额外打印一遍匹配pattern的行。要想只输出处理结果,应加上-n选项,这种用法相当于grep命令
例如:有如下file文件
执行后:
(2)./pattern/d:删除匹配pattern的行
sed命令不会修改原文件,删除命令只表示某些行不打印输出,而不是从源文件中删去。
不打开源文件,去除文件的空行。
删除符合条件的同时修改源文件
(3)/pattern/s/pattern1/pattern2/:查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
(4)/pattern/s/pattern1/pattern2/g:查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2
(5)定址
定址用于决定对那些行进行行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
例如:打印file文件第3行和第3行到第六行。
(6)加注释
例如:在printf那一行加注释,全部加注释
全部加注释,并改变源文件
(7)加行号
例如:给第二到第四行加行号,全部加行号
四、命令和选项
sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的输入行。
命令:
a\:在当行前后添加一行或多行。多行时除最后一行外,每行末尾需用"\"续行
c\:用此符号后的新文本替换当前行中文本。多行时除最后一行外,每行末尾需用"\"续行
i\:在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行d删除行
h:把模式空间里的内容复制到暂存缓冲区
H:把模式空间里的内容追加到暂存缓冲区
g:把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G:把暂存缓冲区里的内容追加到模式空间里,追加在原有内容的后面
p:打印行
q:结束或退出sed
r:从文件中读取输入行
!:对所选行以外的所有行应用命令
s:用一个字符串替换另一个
g:在行内进行全局替换
w:将所选的行写入文件
x:交换暂存缓冲区与模式空间的内容
y:将字符替换为另一字符(不能对正则表达式使用y命令)
选项:
-e:进行多项编辑,即对输入行应用多条sed命令时使用
-n:取消默认的输出
-f:指定sed脚本的文件名
5.退出状态
sed不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。