sed详解---基础篇

来源:互联网 发布:交友聊天软件 编辑:程序博客网 时间:2024/06/04 01:18

  • 前言
    • sed命令行的基本格式
    • 打印匹配行
    • 删除匹配行
    • 替换匹配行中第一次匹配的的字符串
    • 替换匹配行中所有匹配的字符串
    • 修改原文件选项
    • 定址功能
    • 命令和选项
    • 退出状态
    • 思考题

前言

sed意为流编辑器(Stream Editor),常用于在Shell脚本和Makefile中作为过滤器使用,也就是把前一个程序的输出引入到sed输入,经过一系列编辑命令转换为另一种格式输出,sed和vi都源于早起UNIX的ed工具,所以很多sed命令和vi的末行命令是相同的

sed命令行的基本格式

sed option ‘script’ file1 file2 …
sed option -f script file file1 file2

sed处理的文件既可以由标准输出重定向得到,也可以当命令行参数传入,命令行参数可以一次传入多个文件,sed会依次处理,sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件,用-f参数指定,编辑命令的格式为:

/pattern/action
其中pattern是正则表达式,action是编辑操作,sed一行一行读出待处理文件,如果某一行与pattern相匹配,则执行相应的acation,如果一条命令没有pattern只有action,这个action将作用于待处理文件的每一行。

sed是一种在线编辑器,它一次处理一行内容,处理时把当前处理行放在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区的内容,处理完成后,将缓冲区内容送往屏幕,接着处理下一行,不断重复直到文件末尾,文件内容本身并不改变,除非你用重定向存储输出,总的来说,sed主要用于自动编辑一个或多个文件,简化对文件的反复操作

打印匹配行

/pattern/p
使用p命令需要注意,sed是把待处理文件连同处理结果一起输出到标准输出的,因此p命令表示除了把文件内容打印出来还额外打印一遍匹配pattern的行,例如下图:
这里写图片描述
如果要只得到处理结果,应当加上-n选项
这里写图片描述

删除匹配行

/pattern/d
这里写图片描述
注意,sed不会修改原文件,删除命令只表示某些航不打印输出,而不是从原文件删去

替换匹配行中第一次匹配的的字符串

/pattern/s/pattern1/pattern2/
查找匹配pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2

替换匹配行中所有匹配的字符串

/pattern/s/pattern1/pattern2/g
查找匹配pattern的行,并把该行所有匹配pattern1的字符串替换为pattern2
例如下图:
这里写图片描述
还有下面这种用法
这里写图片描述
这里pattern2中的& 表示当前行中与pattern1匹配的字符串

再比如下面这种用法:
这里写图片描述
这里pattern2中的\1表示的是pattern1中第一个()中匹配的内容

修改原文件选项

sed -i
 这里写图片描述

定址功能

定址用于决定对哪些行进行编辑,地址的形式可以使数字,正则表达式,或者没有指定地址,sed将处理文件的所有行

  • 打印第三行:sed -n ‘3p’ file
  • 打印100~300行(包括100和100):sed -n ‘100,300p’ file

地址是逗号分隔的,那么需要处理的地址就是这两行之间的范围,范围可以用数字,正则表达式,或者二者的组合表示
举例如下:

sed ‘2,5d’ file #删除第二行到第五行
sed ‘/start/ ,/end/d’ file #删除包含“start”行到“end”行之间的行
sed ‘/start/,10d’ file #删除包含‘start’行到第十行的内容

输出偶数行与奇数行
这里写图片描述

命令和选项

sed命令告诉sed如何处理由地址输入的各输入行如果没有指定地址就处理所有的行
a:在当前行后添加一行或多行,多行时除最后一行外,每行末尾需要“\”续行
c:用此付好后的新文本替换当前行的文本,多行时除最后一行每行末尾用”\”续行
i:在当前行之前插入文本
h:把模式空间里的内容复制到暂存缓冲区
g:把暂存缓冲区里的内容复制到模式空间,覆盖原有内容
G:把暂存缓冲区的内容追加到模式空间,追加在原有内容后面
l:列出非打印字符
p:打印行
q:结束或退出sed
r:从文件中读取行
!:对所行以外所有行应用命令
s:用一个字符串替换另一个
g:在行内进行全局替换
w:将所选的行写入文件
x:交换暂存缓冲区与模式空间内容
y: 将字符替换为另一字符(不能对正则表达式用y命令)

选项

-e:进行多项编辑,即对输入行应用多条sed命令时使用
-n:取消默认输出
-f:指定sed脚本的文件名

退出状态

sed和grep不一样,不管是否找到指定的模式,退出状态都是0,只有在命令本身出现错误时候,sed的推出状态才不是0.

思考题

1.练习以上所有用法
2.如何用seq和sed输出1到100的累加和?(提示:还要用到bc)

0 0
原创粉丝点击