sed 工具基本使用方法
来源:互联网 发布:彩票开奖源码 编辑:程序博客网 时间:2024/05/21 09:24
什么是 sed
sed 是流编辑器(Stream Editor),在Shell 脚本和 Makefile 中作为过滤器使用。把一个程序的输入引入 sed 的出入,经过一些列的命令转换为另一种格式输出。
sed 使用基础
处理文件的来源
sed 处理的文件来源有两种方式:
- 标准输入重定向得到。比如将上一个程序的标准输出通过管道重定向到sed工具
- 命令行参数传入。通过命令行参数可以一次传入多个文件,sed 会依次处理。
编辑命令方式
sed 的对文件的编辑命令也有两种方式:
- 通过命令行参数传入
- 写成一个脚本文件用参数
-f
指定。
执行命令格式
命令的基本格式:
1. sed option 'script' file2. sed option -f 'scriptfile' file
对文件进行编辑的脚本格式为:
/pattern/action
其中 pattern 是正则表达式,用来匹配文件中符合规则的文本内容。
action 是编辑操作,指定要对匹配到的内容作出什么样的操作。具体流程是,sed 一行一行读取内容,如果某一行与 pattern 规则匹配,则执行相应的 action。 如果没有指定 pattern,也就是为空,那么默认 action将作用于文件的每一行。
sed 在处理文件时,将文件的内容一行一行读取它进程中的缓冲区(也叫模式空间 pattern space),然后开始处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到屏幕上,直到文件末尾。
有两点需要注意的:
- sed 并不会改变原文件内容,如果需要改变可以加选项
-i
或者重定向 传输到别的文件。 - sed 按照Basic 正则匹配内容。
小知识点:
什么是Basic 正则?
在Basic 规范中, 字符{} | () ? +
被解释为普通字符,如果要表示特殊含义,则需要在前面加\
字符转义。比如我们在使用 grep 命令时,默认正则就是 Basic 规范。因为Basic 正则太过于繁琐,也不容易阅读,所以有了Extended 规范。grep 工具 如果需要使用Extended 规范,前面那些字符就不会被解释为普通字符,默认具有特殊含义。不过要使用egrep
或grep -E
才可以使用Extended 规范。注意在 sed 中也可以加选项-E
或者-r
使用Extended 规范,后面有演示(我的环境是 Centos6.5)如不行,可自行查找方式。
常用选项(option)以及命令(action)
选项(option)
选项紧跟在sed 之后。
- -n:只输出匹配 pattern 的行,不输出待处理文件的内容。
- -i :会修改原文件
- -e:进行多项编辑,指定多条sed 命令
- -f:指定sed 脚本的文件名
命令(action)
sed 命令告诉 sed 如何匹配的各行,如果没有指定则处理所有的行。命令在 / 之后,也就是/pattern/action
中action 的位置
- p:将匹配 pattern 的行打印出来
- d:将匹配 pattern 的行删除(默认删除只是不打印匹配的行,不是从哪个原文件中删除)
- s/pattern1/pattern2/:查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
- s/pattern1/pattern2/g:查找符合pattern的行,将改行所有匹配pattern1的字符串替换为pattern2
上述两条命令中:s 表示用一个字符串替换另一个,g 表示在行内进行全局替换 - a:在当前行后面追加新的一行
- c:用此字符后新的文本替换匹配行中所文本
- i:在当前行之前插入一行,与a相对
- l:列出非打印字符,如空格与制表符
- w:将所选行写入文件
注意:
- pattern2 中 &表示原文件的当前行中与pattern1相匹配的字符
- pattern2 为空表示用空白替换
- pattern2 中的 \1 表示与pattern1 第一个() 内相匹配的内容,\2 表示与pattern1 的第二个()相匹配的内容。
小例子:
将一个*.c 文件中的所有printf 注释:
(1)在所有printf 前面添加注释
(2)将所有注释都取消
定址
定址用于指定对那些行进行操纵。定址的形式可以是数字、正则表达式或两者的结合,如果没有指定,默认处理所有行。
比如: sed -n '4p' test.c
打印第四行
sed -n '3,6p' test.c
打印 3-6 行
sed '4,8d' test.c
删除4-8行
sed -n '/int/,/end/p' test.c
打印包含int的行和 end 的行 之间的内容
sed -n '/start/, 10/p' test.c
打印包含start行 到第10行的内容。
- sed 工具基本使用方法
- sed&awk基本使用方法
- sed&awk基本使用方法
- sed&awk基本使用方法
- sed&awk基本使用方法
- sed的基本使用方法
- sed使用方法
- sed使用方法
- sed使用方法
- Debug工具的基本使用方法
- sed 工具
- sed工具
- sed工具
- sed工具
- sed工具
- sed 工具
- sed工具
- sed工具
- C++ 视频课笔记2
- How to build MTFMapper
- Visual Studio Code 使用心得
- NodeJS运行时抛出: Error: listen EADDRINUSE :::3000
- markdown语法技巧2
- sed 工具基本使用方法
- python异常处理
- ApplicationContext 接口容器和BeanFactory 接口容器
- C++ 视频课笔记3
- mybatis数据库查询
- JDBC三种编译
- 2017.7.26学习总结
- python中的继承
- android值制作简易的闹钟和通知栏信息