`

sed使用心得

 
阅读更多

sed 是一种UNIX/LINUX 平台下的轻量级流编辑器,日常一般用于处理文本文件。sed 有许多很好的特性。首先,它相当小巧;其次, sed 可以配合强大的 shell 完成许多复杂的功能。在我看来,sed完全可以看成一个脚本解释器,用类似于编程的手段完成许多事情。

sed简单示例

sed命令的格式是
sed [-options] [command] [stdin]
比如这个例子
$ sed –e ‘d’ ./Mydir/Myfile
执行该命令,将得不到任何输出。在该例中,用一个编辑命令 'd' 调用 sed;sed 打开 ./Mydir/Myfile 将一行读入其模式缓冲区,执行’d’(“删除行”);然后打印模式缓冲区(缓冲区已为空);它对后面的每一行重复这些步骤,这不会产生输出!
对这个命令要说明的几点是:首先,它根本没有修改 ./Mydir/Myfile。这是因为 sed 是流处理器,它只读取在命令行指定的文件,它不试图修改该文件。其次, sed 是面向行的,'d' 命令不是简单地告诉 sed 一下子删除所有输入数据;相反,sed 逐行将 ./Mydir/Myfile 的每一行读入其称为模式缓冲区的内部缓冲区,一旦将一行读入模式缓冲区,它就执行 'd' 命令,然后打印模式缓冲区的内容。最后要注意的事是括起 'd' 命令的单引号的用法,这样可以禁用 shell 扩展。

指定sed的作用范围

看下面的三个例子
$ sed –e ‘1d’ ./Mydir/Myfile
$ sed –e ‘1,10d’ ./Mydir/Myfile
$ sed –e ‘/begin/,/end/p’ ./Mydir/Myfile
第一个例子说明只删除./Mydir/Myfile第一行的缓冲,第二个例子将删除第1~10行的缓冲。第三个例子最复杂,它定义了以字符串’begin’开始到’end’结束的作用范围

sed中的正则表达式

sed支持正则表达式,比如
$ sed –n -e ‘/regexp/p’ ./Mydir/Myfile
比如要删除所有的空行
$ sed –e ‘/^$/d’ ./Mydir/Myfile
sed中的一些特殊定义是
规则 表达式 描述
/./ 将与包含至少一个字符的任何行匹配
/../ 将与包含至少两个字符的任何行匹配
/^#/ 将与以 '#' 开始的任何行匹配
/^$/ 将与所有空行匹配
/}^/ 将与以 '}'(无空格)结束的任何行匹配
/} *^/ 将与以 '}' 后面跟有 零或多个空格结束的任何行匹配
/[abc]/ 将与包含小写 'a'、'b' 或 'c' 的任何行匹配
/^[abc]/ 将与以 'a'、'b' 或 'c' 开始的任何行匹配

再比如一个经典的例子,打印c源代码中的main函数内容,其命令可以写成如下
$ sed –n –e ‘/main[[:space]]*(/,/^}/p’ ./Mydir/*.c
其中[:space]表示空格,[[:space]]*表示有0~多个空格,所以main[[:space]]*(的意思是匹配“main (”字符串;“^}”表示这一行有且只有一个字符}。当然,上面的命令不是十分严谨。

sed –e ‘s/regexp/repalcement’ file

替换是sed命令中最常用的命令,比如如下的例子
$ sed –e ‘s/a/b’ ./Mydir/Myfile
$ sed –e ‘s/a/b/g’ ./Mydir/Myfile
第一个命令将./Mydir/Myfile中每一行第一次出现的字符a替换成字符b;第二个命令由于加入了’/g’,表示是全局(全部)替换字符a成字符b。

经常还可以看见如下两种形式的sed
$ sed –e ‘1,10s/a/b’ ./Mydir/Myfile
$ sed –e ‘/^$/,/^END/s/a/b/g’ ./Mydir/Myfile
第一个命令是指替换1~10行;第二个命令是指全局替换从空行开始到以END开始的行中的内容。

替换命令不一定非要以/分隔,比如
$ sed –e ‘s:usr/local:/usr:g’ ./Mydir/Myfile
就是将./Mydir/Myfile中的usr/local全部替换成/usr

要用好替换命令,当然要使用正则表达式,除了上面所说的表达式的例子,还有一些是非常有用的
字符类 描述
[:alnum:] 字母数字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字 [0-9]
[:graph:] 任何可视字符(无空格)
[:lower:] 小写 [a-z]
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写 [A-Z]
[:xdigit:] 十六进制数字 [0-9 a-f A-F]

比如下面这个例子
$ sed –e ‘s/<[^>]*>//g’ ./Mydir/Myfile
< [^>]*>匹配<…>这样的字符串(…中不含>)。运行这个命令,能够将 “<b>This</b> is what <b>I</b> meant.”这样的字符串替换成“This is what I meant.”

考察如下的命令
$ sed -e 's/.*/# &/' ./Mydir/Myfile
这个命令将所有的非空行以“#”注释掉——&告诉sed在行首插入字符。

‘s///’允许我们在规则表达式中定义区域,然后可以在替换字符串中引用这些特定区域。这些区域是以(和)隔开的。
比如定义三个匹配非空字符的区域'(.*) (.*) (.*)',现在可以定义这三个区域的动作,比如
$ sed -e 's/(.*) (.*) (.*)/PreFix 1-2 Fix 3/' ./Mydir/Myfile
假如把三个区域分别命名为a、b、c,则最后结果是 PreFix a-b Fix c

sed中组合命令

sed中的命令可以组合,以;号隔开,比如
$ sed –n –e ‘=;p’ ./Mydir/Myfile
=表示打印行号,p表示打印。对于更复杂的指令,则可以写成命令脚本,然后用-f选项导入,比如
$ sed –n –f MyScript.sed ./Mydir/Myfile
对于同一个地址上的操作,则可以用{}组合,比如
$ sed –n ‘1,20{ s/samba/Samba/g s/posix/POSIX/g }’ ./Mydir/Myfile

sed中的行附加命令

在当前行之前插入行“i”,如果要插入多行,则将多行用分隔
在当前行之后插入行“a”,用法和上面相似
更改当前行“c”

 

-- The End --

 

转自:http://space.itpub.net/519536/viewspace-558364

分享到:
评论

相关推荐

    Linux shell命令学习心得

    在日常工作中,我们还会经常使用`grep`进行文本搜索,`sed`进行文本处理,`awk`进行数据操作,这些都是强大的文本工具。 最后,了解并熟练使用一些高级命令,如`history`查看命令历史,`alias`定义命令别名,`sudo`...

    shell学习心得

    ### Shell学习心得 #### Shell简介 Shell是一种计算机操作系统壳层,用作用户与操作系统内核之间的接口。在Unix、Linux及类Unix系统中,Shell既是一个命令解释器,也允许进行程序设计。Shell脚本是用Shell语言编写...

    linux心得范文.doc

    "Linux心得范文.doc" 本文档主要讲解了Linux操作系统相关的知识点,涵盖了Linux的基本概念、命令、工具和应用场景等方面的内容。 1. Linux基本概念 Linux是一个基于Unix的开源操作系统,具有自由、开放、可移植、...

    linux学习心得体会及遇到的问题

    以下是我对Linux学习的一些心得体会,以及我在学习过程中遇到的问题及解决策略。 首先,了解Linux的基础知识至关重要。这包括Linux的发行版分类(如Ubuntu、CentOS、Debian等),Linux文件系统结构(根目录、用户家...

    LINUX系统实践报告-常用 shell 命令及实用工具的使用

    - 使用`cat`和`sed`等命令将不同分割文件的部分内容拼接成新文件`b`。 - 使用`wc`命令统计文件`b`中的单词数、字符数和行数。 - 使用`echo`和`date`命令将学号、姓名及当前日期时间信息追加到文件`b`的末尾。 - ...

    嵌入式课程设计

    #### 三、总结与心得 通过本次嵌入式课程设计,学生不仅能够掌握HK-51系列仿真开发系统的使用方法,还能深入了解液晶显示技术及其相关控制器芯片的原理与应用。此外,通过实践编程和调试,学生能够提高解决实际问题...

    中北大学软件学院操作系统openEuler实验报告2

    - 使用`sed`命令清理格式,例如删除不必要的字符。 - 使用`awk`命令提取MAC地址。 4. **将筛选后的MAC地址输出到文件**: - 使用`&gt;&gt;`重定向符号将结果追加到之前创建的文件中。 ### 检测FTP服务 1. **安装nmap...

    Linux下Shell编程从入门到精通视频教程.txt

    20、Shell编程之学习心得分享及拓展.mp4 19、Shell编程之实战WEB界面展示二.mp4 18、Shell编程之实战WEB界面展示一.mp4 17、Shell编程之磁盘监控报警脚本.mp4 16、自动收集服务器硬件系统信息脚本.mp4 15、Shell批量...

    89.嵌入式操作系统--成绩统计管理系统.docx

    - **调试与测试**:运行脚本,检查错误,使用`grep`、`sed`等工具进行调试。 - **实训报告**:撰写报告,记录设计思路、遇到的问题、解决方案以及个人心得。 在整个实训过程中,学生将深入理解Shell脚本编程,...

    利用shell脚本修正代码风格 - Eating my own dog food

    5. 实践应用:提供实例展示如何在实际项目中使用`QARobot.sh`,并分享使用心得和经验。 通过学习这些内容,开发者可以提升自己在代码风格统一和自动化工具方面的技能,使得代码更加整洁,提高团队合作效率。

    linux ebook

    由于链接无法在这里直接访问,但通常博主会分享阅读电子书的心得体会,或者是对书中内容的补充解释。 标签中的“源码”暗示这本电子书可能包含了一些有关如何阅读、理解和修改开源软件源代码的信息。这对于那些希望...

    perl的学习笔记1

    它的语法混合了C、sed、awk等语言的特点,使得它既适合快速原型开发,也适合大型项目。Perl中的变量声明不需要特定的类型,可以根据赋值自动调整,这种动态类型系统极大地提高了编程效率。 在Perl中,正则表达式是...

    Linux shell 参考文档 杂七杂八留下的代码

    【描述】中的链接指向了一篇博客文章,虽然没有具体的描述内容,但我们可以推测这可能是一个个人博客,博主分享了自己在使用Linux Shell过程中的经验和心得。在iteye这样的技术交流平台上,通常会有很多实战案例和...

    共享安装 cacti 过程中的一些经历 cacti 中文-linux - sun solaris

    ### 共享安装 Cacti 过程中的经历与心得 #### 一、项目背景及需求分析 在项目中遇到了一个需求,原有的 Cacti 监控系统所在的服务器需要退役,因此需要在新的服务器上重新部署 Cacti。然而,原先负责安装 Cacti 的...

    Unix实验报告设计

    - **读取数据**:使用`awk`或`sed`命令逐行读取文件内容。 - **数据解析**:提取每条记录中的班级和成绩信息。 - **计算统计量**:利用循环结构和算术运算符计算每个班级的学生数量和平均成绩。 - **输出结果**:...

    鸟哥Linux私房菜

    - **命令行操作**:熟练使用各种Linux命令,如`ls`, `cd`, `mkdir`, `rm`, `grep`, `sed`, `awk`等。 **1.2 软件安装方法** - **RPM与YUM**:利用RPM包管理系统和YUM(Yellowdog Updater Modified)工具进行软件...

    linuxc 文本文档

    在这个文本文档中,作者可能是分享了自己在学习Linux C编程过程中的心得、笔记或者是代码示例,目的是为了帮助他人学习和理解这个领域。 【描述】"Linuxc供大家学习 只是自己学习的一个过程记录了下来 欢迎来下载啦...

    Linux操作系统教学视频

    - 文本处理命令:如`cat`(查看文件内容)、`grep`(搜索文本中的模式)、`sed`(流编辑器)等。 - 进程管理命令:如`ps`(显示进程状态)、`kill`(终止进程)、`top`(显示系统中运行的所有进程)等。 - 系统...

Global site tag (gtag.js) - Google Analytics