linux学习之linux百问3,sed了解
2013-05-14 20:41
155 查看
1、sed
sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出。
sed和
vi都源于早期UNIX的
ed工具,所以很多
sed命令和
vi的末行命令是相同的。
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命令
/pattern/p | 打印匹配pattern的行 |
/pattern/d | 删除匹配pattern的行 |
/pattern/s/pattern1/pattern2/ | 查找符合pattern的行,将该行第一个匹配 pattern1的字符串替换为 pattern2 |
/pattern/s/pattern1/pattern2/g | 查找符合pattern的行,将该行所有匹配 pattern1的字符串替换为 pattern2 |
p命令需要注意,
sed是把待处理文件的内容连同处理结果一起输出到标准输出的,因此
p命令表示除了把文件内容打印出来之外还额外打印一遍匹配
pattern的行。比如一个文件
testfile的内容是
123 abc 456
打印其中包含
abc的行
$ sed '/abc/p' testfile 123 abc abc 456
要想只输出处理结果,应加上
-n选项,这种用法相当于
grep命令
$ sed -n '/abc/p' testfile abc
使用
d命令就不需要
-n参数了,比如删除含有
abc的行
$ sed '/abc/d' testfile 123 456
注意,
sed命令不会修改原文件,删除命令只表示某些行不打印输出,而不是从原文件中删去。
使用查找替换命令时,可以把匹配
pattern1的字符串复制到
pattern2中,比如:
$ sed 's/bc/-&-/' testfile 123 a-bc- 456
pattern2中的
&表示原文件的当前行中与
pattern1相匹配的字符串,再比如:
$ sed 's/\([0-9]\)\([0-9]\)/-\1-~\2~/' testfile -1-~2~3 abc -4-~5~6
pattern2中的
\1表示与
pattern1的第一个
()括号相匹配的内容,
\2表示与
pattern1的第二个
()括号相匹配的内容。
sed默认使用Basic正则表达式规范,如果指定了
-r选项则使用Extended规范,那么
()括号就不必转义了。
如果
testfile的内容是
<html><head><title>Hello World</title> <body>Welcome to the world of regexp!</body></html>
现在要去掉所有的HTML标签,使输出结果为
Hello World Welcome to the world of regexp!
怎么做呢?如果用下面的命令
$ sed 's/<.*>//g' testfile
结果是两个空行,把所有字符都过滤掉了。这是因为,正则表达式中的数量限定符会匹配尽可能长的字符串,这称为贪心的(Greedy)比如
sed在处理第一行时,
<.*>匹配的并不是
<html>或
<head>这样的标签,而是
<html><head><title>Hello World</title>
这样一整行,因为这一行开头是
<,中间是若干个任意字符,末尾是
>。
相关文章推荐
- linux学习之linux百问4,awk了解
- linux学习之linux百问2,不断更新
- 继续学习Linux了解了冯诺依曼体系写于2014-05-27
- Linux学习之文件管理与权限了解
- Linux命令学习:统计socket各种状态的连接数(sed/awk)
- Linux(RadHat)基础学习—了解SELinux
- linux学习命令--sed命令
- 了解学习Linux的基本命令
- linux下的C语言快速学习—计算机体系结构基础简单了解
- 学习gnome-panel源码,了解linux gtk编程
- Linux下sed,awk,grep,cut,find学习笔记
- Linux sed命令学习
- Linux学习—sed
- 【Linux学习】如何了解一个陌生的命令?
- 【Linux学习011】sed命令详解
- 2016-3-8 linux基础学习——sed命令
- Linux学习--第十一天--source、环境变量目录、欢迎信息、正则、cut、awk、sed、sort、判断表达式、if、for、case、一些脚本
- Linux学习之sed的使用
- linux学习之sed、awk
- linux命令学习之(sed)