`
shinfocom
  • 浏览: 1188593 次
文章分类
社区版块
存档分类
最新评论

shell脚本学习:正则表达式之sed,tr篇

 
阅读更多

在linux中,主要通过sed命令来替换文本,通过正则表达式匹配出的命令,可以用sed来灵活的替换掉,极大的节省了工作量。可以说,sed是shell脚本里替换的最主要力量,也是shell脚本里用的最多的命令之一,sed是基于行的编译器,也就是说,它会将匹配到的内容的行打印出来,而且sed有自己的模式空间(内存),也就是说sed并不会改变原文件的内容,但是sed -i 可以直接修改原文件(此功能慎用,很容易造成损失)

sed的用法格式:

sed [option] /PATTERN/COMMAND files

sed [option] ADDR,ADDR/COMMAND files

-n //避免没有被匹配的行显示

-i //直接修改原文件

另外介绍三个基本正则表达式,可以配合sed来匹配单词

\<或\b //锚定词首 [^ ] //取反,除...之外的一个字符

\>或\b //锚定词尾

##一个简单的例子来说明sed的用法:

sed 1,3p /proc/cpuinfo

这条命令将cpuinfo的内容前三行打印两次,如果只要显示前三行,则加 -n 选项,这里的1,3指第一到三行,p是打印的意思。

##扩展几个sed的command:

p 打印 /i 在匹配的内容之前插入

/d 删除 /a 在匹配的内容之后插入

s 替换 /g 全局替换

同时sed也可以使用正则表达式:

例如:

sed "/^model/a\#This is my cpu." /proc/cpuinfo

#看到^了吗?这个命令的意思是在model之后插入#This is my cpu. 注意是model这行后面的一行。

下面介绍替换,替换的模式 s/要查找的内容/要替换成的内容/command

例如:

sed ‘1,$s/yes/YES/' /proc/cpuinfo

#将/proc/cpuinfo里从1到最后一行里的yes替换成YES。

#1,$指从第一行到最后一行 $在这里匹配最后一行,$-2倒数第二行,以此类推。

# 也可以使用/g全局替换,即符合条件的全部替换掉

好了,关于sed的几个练习:

sed练习
1、将/etc/inittab文件中以id开头后面跟了两个冒号且两个冒号间有一个数字的那一行中的那两个冒号间的数字改为3;
2、将/etc/passwd文件中以n开头的所有单词的词首字母改为大写;
3、在/proc/meminfo文件中所有以HugePages开头的行后面添加“# For performancing”一个新行;
4、删除/etc/inittab文件中所有以#开头,或者以一些空白字符后跟一个#开头的行,并且将所有以一个空格后跟一个数字结尾的行中的那个行尾的数字改为0;

答案:1. sed s@^id:[0-9]:@id:3:@g /etc/inittab

#这里的@也是替代符号,当要替换的文本是路径时,这个技巧很好用。

2. sed '1,$s/\bn/N/pg' /etc/passwd

3. sed "/HugePages/a\# For performancing" /proc/meminfo

4. sed -e '/^[[:space:]]*#.*/d' /etc/inittab -e "s/[[:space:]][0-9]$/ 0/g" /etc/inittab

#这里使用了-e 选项,处理两条sed命令 因为文本的开头都有一个空字符,所以^[[:space:]]*#匹配第一个要求,*代表0到任意个

————————————————————————————————————————————————————————————————————————————————

tr命令可以方便的将指定字符替换成别的字符,例如小写字母替换成大写字母,而sed是处理行的,和tr配合使用,可以方便快速的替换行里的字符。

例如:echo abCD | tr ’ab‘ ’AB‘ //将ab替换为AB

tr有一个比较常用的选项 -d, –delete 删除集合1中的字符而不是转换

eco "banana" | tr -d 'a'

#一个sed和tr的脚本

写一个脚本:
1、将/var/目录下所有文件的文件名的首字母和尾字母显示时改为大写;


分享到:
评论

相关推荐

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    第7章 正则表达式介绍 49 第8章 grep家族 56 第9章 AWK介绍 66 第10章 sed 用法介绍 89 第11章 合并与分割 104 第12章 tr用法 119 第三部分 登录环境 第13章 登录环境 125 第14章 环境和shell变量 132 第15章 引号...

    Linux与unix shell编程指南.rar

    grep家族,sed,AWK,正则表达式,tr用法 第一部分 shell 第1章 文件安全与权限 1 第2章 使用find和xargs 14 第3章 后台执行命令 22 第4章 文件名置换 31 第5章 shell输入与输出 34 第6章 命令执行顺序 46 第二部分 ...

    shell脚本详解

    第7章_正则表达式介绍; 第8章_grep家族; 第9章_awk介绍; 第10章_sed用法介绍; 第11章_合并与分割; 第12章_tr用法; 第13章_登录环境; 第14章_环境和shell变量; 第15章_引号; 第16章_shell脚本介绍; 第17章_...

    Linux shell脚本 精华中文版

    007_文本过滤_正则表达式.pdf 008_grep家族.pdf 009_awk介绍.pdf 010_sed用法介绍.pdf 011_合并与分割_sort_join_uniq_cut_paste_split.pdf 012_tr的用法.pdf 013_登录环境.pdf 014_环境和shell变量.pdf ...

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四...

    Unix shell 基础知识普及

    7. 正则表达式介绍 文本过滤 8. GREP 家族 9. AWK 介绍 10. sed 用法介绍 11. 合并与分割 12. tr 用法 13. 登录环境 14. 环境与 SHELL 变量 特定s h e l l变量 15. 引号 16. SHELL 脚本介绍 17. 条件测试 18. 控制流...

    shell编程 linux

    007正则表达式介绍.pdf 008grep 家族.pdf 009AWK 介绍.pdf 010sed 用法介绍.pdf 011合并与分割.pdf 012tr 用法.pdf 013登录环境.pdf 014环境和shell变量.pdf 015引号.pdf 016shell脚本介绍.pdf 017条件...

    Linux Shell编程3/3

    _grep家族 |_awk介绍 |_sed用法介绍 |_合并与分割 |_tr用法 第三部分登录环境 |_登录环境 |_环境和shell变量 |_引号 第四部分基础shell编程 |_shell脚本介绍 |_条件测试 |_控制...

    LINUX与UNIX_Shell编程指南

    第7章 正则表达式介绍 第8章 grep家族 第9章 AWK介绍 第10章 sed 用法介绍 第11章 合并与分割 第12章 tr用法 第三部分 登录环境 第13章 登录环境 第14章 环境和shell变量 第15章 引号 第四部分 基础shell编程 第16章...

    Linux命令学习 shell pdf格式

    第七章 正则表达式介绍 第八章 grep家族 第九章 AWK介绍 第十章 sed用法介绍 第十一章 合并与分割 第十二章 tr用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和shell变量 第十五章 引号 第四部分 基础...

    UNIX命令及SHELL编程

    07_文本过滤-正则表达式介绍.PDF 08_文本过滤-grep 家族.PDF 09_文本过滤-AWK 介绍.PDF 10_文本过滤-sed 用法介绍.PDF 11_文本过滤-合并与分割.PDF 12_文本过滤-tr 用法.PDF 13_登录环境-登录环境.PDF 14_...

    Linux与UNIX Shell编程指南.rar

    第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四部分 基础...

    shell帮助文档

    07-正则表达式介绍.pdf 08-grep 家族.pdf 09-AWK 介绍.pdf 10-sed 用法介绍.pdf 11-合并与分割.pdf 12-tr 用法.pdf 13-登录环境.pdf 14-环境和shell变量.pdf 15-引号.pdf 16-shell脚本介绍.pdf 17-条件测试.pdf 18-...

    Linux Shell编程1/3

    _grep家族 |_awk介绍 |_sed用法介绍 |_合并与分割 |_tr用法 第三部分登录环境 |_登录环境 |_环境和shell变量 |_引号 第四部分基础shell编程 |_shell脚本介绍 |_条件测试 |_控制...

    Linux Shell编程2/3

    _grep家族 |_awk介绍 |_sed用法介绍 |_合并与分割 |_tr用法 第三部分登录环境 |_登录环境 |_环境和shell变量 |_引号 第四部分基础shell编程 |_shell脚本介绍 |_条件测试 |_控制...

    LINUX与UNIX SHELL编程指南

    007-正则表达式.PDF 008-grep家族.PDF 009-AWK介绍.PDF 010-sed 用法介绍.PDF 011-合并与分割.PDF 012-tr 用法.PDF 013-登录环境.PDF 014-环境和shell变量.PDF 015-引号.PDF 016-shell脚本介绍.PDF 017-条件测试.PDF...

    Linux与UNIX Shell编程指南.

    第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四部分 基础...

    LINUXshel详细l编程指南

    第7 章 正则表达式介绍 第8 章 grep家族 第9 章 AWK介绍 第10章 sed 用法介绍 第11章 合并与分割 第12章 tr用法 第13章 登录环境 第14章 环境和shell变量 第15章 引号 第16章 shell脚本介绍 第17章 条件...

Global site tag (gtag.js) - Google Analytics