手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

Linux常用命令:sed

[日期:2016-10-20] 来源:Linux社区  作者:willhua [字体: ]

本文记录的是自己在学习《Linux私房菜》中正则表达式的笔记。 

鸟哥的Linux私房菜-基础学习篇(第四版)高清完整书签PDF版 下载见Linux公社1号服务器 http://www.linuxidc.com/Linux/2016-02/128220.htm

关于行尾符$

如果文件本身没有内容,比如使用touch新建的文件,那么$将会没有意义。例如下面操作:

先使用touch新建了一个test.txt文件,然后尝试使用sed命令去在行尾增加内容,但是没有成功(紧接着的cat命令没有输出任何东西),然后我使用vim给test.txt手动增加了一行内容“add by vim”,然后再使用同样的sed命令就成功了,如后续cat命令输出结果。

命令sed

sed是一个十分有用的管道命令,功能很多,而且都是用的比较多的场景。

sed [-nefri] [动作]

  • -n:安静模式。默认情况下,所有向sed的stdin都会显示在屏幕上,而若使用安静模式,则只有经过sed特殊处理的行或者命令显示在屏幕上
  • -e:直接在命令行模式上进行sed的动作编辑
  • -f:直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作
  • -r:使sed支持扩张正则表达式语法,默认为基础正则表达式语法
  • -i:直接修改读取的文件内容,而不是在屏幕上输出。默认是在屏幕上输出,而源文件不受影响

下面是动作说明,动作需要使用单引号‘’,且可以用两个数字或者$来选择进行动作的行数,‘[n1[,n2]]function’,比如'2,5d','2d','3,$d'这三种形式,分别表示选择[2-5]行,第2行,[3-最后一行]。也可以使用正则表达式来选择行,比如'/正则表达式/d',则将对符号正则表达式的行进行删除动作。function有如下操作:

  • a:新增。在a的后面必须接字符串,且不能全是空格的字符串,表示在当前行的下一行写入这些数据
  • c:替换。c的后面必须接字符串,这些字符串将替换n1,n2之间的行,即删除行[n1,n2],然后在n1-1后面写入这些字符串
  • d:删除。删除行[n1,n2]
  • i:插入。i的后面必须接字符串,这些字符串将出现当前行的上一行
  • p:打印。将选择的数据打印出来,就是显示在屏幕上。通常与-n一起
  • s:替换。直接进行替换工作,可以使用正则表达式,例如'1,20s/old/new/g'

关于对function的作用范围,测试表明:

  • 若没有选择,即例如‘a str’,对于a,d,i,p则表示选择所有的行。而对于c,则并不是删除所有行,然后只增加一行str,而是把所有行都替换为str
  • 如果有选择则,即例如‘1a str’,'1,3a str','2,$a str','$a str','/正则表达式/a str';对于a,d,i,p则表示选择这些行进行动作。而对于c,若是使用[n1[,n2]]形式选择的行,则删除全部行,再增加一行str;而若是使用正则表达式选择的行,则是把选择的每一行都替换成str!

     

  • 若文件为空文件,那么这些功能都将无效果,包括增加类的命令a,i

使用a来增加多行:在每一行后面都必须使用反斜杠“\”来进行新行的增加,例如:test.txt中本来只有一行:this is a test file.,然后使用a增加了三行

使用sed删除空行:sed -i '/^$/d' filename,解释:-i表示直接修改文件而不在屏幕上显示,/^$/使用的是正则表达式,在正则表达式中^表示行首,$表示行尾,行尾与行首之间没有东西则是空行,d表示删除。

sed命令有一个查找替换功能:

sed 's/要被替换的字符串/新的字符串/g'    filename

其中,要“被替换的字符串”是使用正则表达式的,而对于“新的字符串”那肯定就是普通的字符。下面是我做的一些测试。

在sed命令中引入shell变量 http://www.linuxidc.com/Linux/2014-03/97896.htm

Linux下Shell编程——sed命令基本用法 http://www.linuxidc.com/Linux/2013-06/85526.htm

Unix文本处理工具之sed  http://www.linuxidc.com/Linux/2013-08/89315.htm

sed 高级用法 http://www.linuxidc.com/Linux/2014-09/106961.htm

sed命令详解与示例 http://www.linuxidc.com/Linux/2014-11/109325.htm

Linux正则表达式sed 详述  http://www.linuxidc.com/Linux/2015-04/116309.htm

Linux文本处理工具之sed  http://www.linuxidc.com/Linux/2015-01/111436.htm

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-10/136197.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款