博客导读网

一个让你随便看看的地方

sed命令使用详解

推荐
LinuxPig.com

1 sed 流编辑器

1.1 什么是sed?

流编辑器 是用来从文件读取文本或者从管道实现基本的变化。结果送到标准输出。 sed 命令的语法不指定输出文件,但是结果可以通过使用输出重定向来写入到文件中。编辑器并不改变原来的文件。

sed 和其它编辑器比如 vi 和 sed的区别在于它能够过滤来自管道的输入。在编辑器运行的时候你不要去干涉它;所以 sed常常被称作 批编辑器 。此特性允许你在脚本中使用编辑命令,极大的方便了重复性编辑任务。当面对文件中大量的文本替换的时候, ed 将是一个极大的帮助。

1.2 sed命令

a\ 在当前行后面增加文本。

c\ 用新的文本替换当前行。

d 删除文本。

i\ 在当前行之前插入文本。

p 打印文本。

r 读取一个文件。

s 搜索并且替换文本。

w 写入一个文件。

1.3 打印包含pattern的行

 sed  -n '/pattern/p' filename 

1.4 删除包含pattern的行

sed  '/pattern/d' filename 

1.5 行的范围

sed '2,4' filename 

sed '3,$d' filename

1.6 查找替换

sed 's/pattern1/pattern2/g' filename

1.7 多个查找替换命令用单独选项 -e 来隔开

sed -e 's/pattern1/pattern2/g' -e 's/pattern3/pattern4/g' filename

1.8 输出保存到文件,使用重定向

sed '3,$d' filename > new_filename

1.9 练习

  1. 打印在你 scripts 目录中的文件列表,用 “.sh” 来结尾。注意你可能需要unalias ls。把结果放入一个临时文件。
  2. 完成一张文件列表:包含了在 /usr/bin 中且第二个字符是 “a” 的文件,把结果放入一个临时文件。
  3. 删除每个临时文件的最初3行。
  4. 把仅包含 “an” 的行打印到标准输出。
  5. 建立一个包含 sed 命令的文件来完成之前的两个任务。在这个文件中加入一个额外的命令使得在以字符串 “man” 开始的每行加入一个例如 “*** This might have something to do with man and man pages ***” 的字符串。检查结果。
  6. 一个稍长的根目录的列表 /,用于输入。建立一个包含 sed 命令的文件来检查符号连接和纯文本文件。如果一个文件为符号连接,用类似 “–This is a symlink–” 这样的一行开始。如果文件是纯文本,在同一行上加入字符串,加入一个类似 “<– this is a plain file” 的注释。
  7. 建立一个从文件中显示包含空格的脚本。这个脚本应该使用一个 sed 脚本来向用户显示明显的信息。

1.10 答案

  1. ls /usr/bin | sed -n '/(^.a.*)/p' 

特别解释一下:

a*与a.*的区别,a*表示匹配a,aa,aaa,aaaa-–,而a.*表示匹配a后的任意多个字符,如aa,ab,acgx0

a.*b$ 匹配 a 和 b 中间有任何字符的情况

a*b$ 匹配 a 和 b 中间有任意个a的情况

1.11 字符元集

^

锚定行的开始 如:/^sed/匹配所有以sed开头的行。

$

锚定行的结束 如:/sed$/匹配所有以sed结尾的行。

.

匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。

*

匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

[]

匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。

[^]

匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

(..)

保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。

&

保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

<

锚定单词的开始,如:/<love/匹配包含以love开头的单词的行。

>

锚定单词的结束,如/love>/匹配包含以love结尾的单词的行。

x{m}

重复字符x,m次,如:/0{5}/匹配包含5个o的行。

x{m,}

重复字符x,至少m次,如:/o{5,}/匹配至少有5个o的行。

x{m,n}

重复字符x,至少m次,不多于n次,如:/o{5,10}/匹配5–10个o的行。

您可能感兴趣的文章

原文地址:http://item.feedsky.com/~feedsky/LinuxPig_com/~8174374/368946446/6278143/1/item.html

LinuxPig.com的其他文章
c多线程的相关函数和实例 一个 c json 解析库–mjson 介绍和实例
常用DNS服务器地址收集 Linux shell 的 test 命令用法详解
VI/VIM 16进制查看文件的方法总结 给网页自动添加头部的apache模块mod_layout
域名相关概念 — A记录,MX记录,CNAME记录,url转发,ns记录 Shell读文件的几种方法总结(b shell)
linux上将文本行倒序输出的方法总结 Linux中技巧之一:叹号命令
更多...

© 2010 博客导读网 BlogABC.NET 本站所有内容皆由网友推荐而来,所有博文的版权归原作者所有,如有冒犯,请邮件告知。uncracker#gmail.com