[图文] linux sed入门的15个小操作
E-mail:nathanielwen@163
近期在学习Linux Shell编程中关于sed工具的部分,出于习惯,在经历各种百度、各种论坛、各种资料之后,一定会整理一份文档作为自己学习的小小总结,也希望可以帮助很多跟我一样渴望进入Linux世界的新手们,这里要推荐两个很好的资源:
www.linuxso/command/
UNIX.shell范例精解(第4版)
这份文档里面的很多知识点,包括使用的databook文件等都来自于这两个资源,如果有侵犯版权问题,也请见谅~
关于文档的几点说明:
(没有耐心的童鞋可以跳过这一页)
1、注释部分用“#”
2、指令部分用黄的底标出,在其后附上指令运行截图
3、每个操作涉及的选项或者参数均用红加粗字体显示
4、部分操作之后会附加知识点拓展和常用操作,希望可以更有效的使用sed工具
5、文档正文部分结束后附录I会有一些知识点的补充,难度上没有增加,只是不方便安排在常用操作中
6、关于元字符和正则表达式的部分,难度较大,再其他文档中会有讲解,或者也可以参阅《UNIX.shell范例精解(第4版)》,该书扫描版的pdf文档可以上网下载或者发邮箱联系我,很欢迎可以分享优秀的资源
7、文档的附录II部分,列出了文件databook的内容
我也是新手,理解能力,表达能力不足,很多内容不可能面面俱到,同时,必然也会存在很多纰漏,希望大家指正、见谅,我已经尽力了,thank you~
#首先介绍一下命令的基本格式:
sed [options] '{command}' [filename]
例如sed -n '1,3p' databook
出于个人习惯在接下来的例子中,通常将命令等价的表示为
cat filename | sed [options] '{command}'
例如 cat databook | sed -n '1,3p'
#在正式开始之前,我们还需要一个用于操作的文本文件datafile,该文件会在附在附录II 里
#操作一:“s”参数,替换某个单词,例如将Steve Blenheim替换为Steve Jobs
为了方便阅读,我们将第一行截取,存至temp文件
cat databook | head -n 1 > temp
(这里的“>”是重定向符号,将默认显示在终端上的内容,写入到temp文件中)
cat temp | sed 's/Blenheim/Jobs/'
#知识点拓展:上述指令等价于sed 's/Blenheim/Jobs/' temp
#常用操作:将空格替换为TAB键(或者其逆操作,也可以替换为其他符号)
cat -A temp
cat temp | sed 's/ /\t/g' | cat –A
#知识点拓展:cat -A 可以显示出文件中不可打印的符号,如行尾显示为“$”,TAB显示为“^I”
#操作二:“-e”选项或者“;”,一次性替换多个单词,如将Steve替换为Bill,并且将Blenheim修改为Gates
cat temp | sed -e 's/Steve/Bill/' -e 's/Blenheim/Gates/'
cat temp | sed 's/Steve/Bill/;s/Blenheim/Gates/'
#可能有些人已经想到,直接用 Bill Gates 替换 Steve Blenheim,不就行了吗?的确是这样,这里确实是为了说明某个知识点而违背了shell简化工作的本质思想~
#操作三:“g”参数,表示替换一行中所有需要替换的词
#可以看到temp文件中原本各个字段是使用冒号“:”分隔的,假设我们要把分隔符改为“| ”符
#现在尝试一下两种不同的指令格式,注意,指令2仅比指令1多了一个“g”参数
指令1
cat temp | sed 's/:/| /'
指令2
cat temp | sed 's/:/| /g'
#操作四:匹配指定模式,在满足某一条件之后再进行操作
#我们将databook的前10行存至文件temp
head databook > temp
#现在将含有单词“Karen”的那些行中所有的“Karen Evich”替换为“KE”,姑且称之为“单词匹配”
cat temp | sed '/Karen/s/Karen Evich/KE/g'
#行匹配,temp里Karen Evich出现了三次,如果我们只针对第8,9两行的名字修改
linux shell编程求和cat temp | sed '8,9 s/Karen Evich/KE/g'
#知识点拓展:实现更精确匹配,在这里只是作为一个好玩的小技巧介绍一下
#假设temp的内如下
#现在需要将第一个this之后的Tuesday替换为Friday,第二个last之后的Tuesday替换为Sunday
cat temp | sed '/this/s/Tuesday/Friday/;/last/s/Tuesday/Sunday/'
#注意分号连接的两条语句的顺序,与以下指令对比,注意输出结果
cat temp | sed '/last/s/Tuesday/Sunday/;/this/s/Tuesday/Friday/'
#操作五:“-f”选项,引入脚本文件作为sed的参数
#还是用databook文件的前10行作为待处理的文本
head -n 10 databook > temp
#创建所作为sed参数的脚本文件SedOptions
echo 's/Steve/Bill/;s/Blenheim/Gates/;8,9 s/Karen Evich/KE/g ' > SedOptions
cat temp | sed -f SedOptions
#注意:无论在命令行中还是在脚本文件(SedOptions也可以称为源文件)中,都不需要单引号('')
#操作六:“-n”选项,使操作状态为quiet

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。