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

关于行尾符$

如果文件本身没有内容,比如使用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

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

Linux常用命令:sed的更多相关文章

  1. linux 常用命令大全

    linux 常用命令大全 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统 ...

  2. Linux常用命令速查备忘

    Linux常用命令速查备忘   PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...

  3. Linux常用命令大全(非常全!!!)

    Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...

  4. 【原创】Linux基础之linux常用命令之文本替换

    linux常用命令之文本替换 1 vi vi test_file :%s/h/h1/g 注释:全文替换,将h替换为h1 :1,4s/h/h1/g 注释:将第1行到第4行的h替换为h1 :%s/\n/, ...

  5. 转载Alpine Linux常用命令

    Alpine Linux常用命令 目录 一:Alpine Linux开启SSH远程登陆 1.简介: 2.配置 3.配置命令 4.重启服务 二:Alpine Linux源管理 1.简介 2.国内源简介: ...

  6. 【转载】Linux常用命令

    Linux常用命令大全(非常全!!!) 转载出处:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html 系统信息 arch 显示机器的处理器架构( ...

  7. Linux常用命令-文本查看篇

    前言 Linux常用命令中,除了cat还有很多其他用于文本查看的命令.本文将简单介绍一下这些文本查看的命令. 全文本显示--cat cat可能是常用的一个文本查看命令了,使用方法也很简单: cat f ...

  8. Linux常用命令全称

    Linux常用命令全称 pwd:print work directory   打印当前目录 显示出当前工作目录的绝对路径 ps: process status(进程状态,任务管理器)    常用参数: ...

  9. Linux常用命令大全(转)

    (转)Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因, ...

  10. 18-10-09 Linux常用命令大全(非常全!!!)

     Linux常用命令大全(非常全!!!)   Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制, ...

随机推荐

  1. 快速搭建php环境

    WAMP:在windows系统下搭建PHP开发环境 APPSERVER: 两种可用于开发环境的,一般用WAMP LAMP构架 Linux系统 Apache服务器管理软件 Mysql数据库 php语言 ...

  2. 重置EntityFramework数据迁移到洁净状态

    前言 翻译一篇有关EF数据迁移的文章,以备日后所用,文章若有翻译不当的地方请指出,将就点看,废话少说,看话题.[注意]:文章非一字一句的翻译,就重要的问题进行解释并解决. 话题引入 无法确定这种场景是 ...

  3. MVC中处理表单提交的方式(Ajax+Jquery)

    MVC中处理表单有很多种方法,这里说到第一种方式:Ajax+Jquery 先看下表单: <form class="row form-body form-horizontal m-t&q ...

  4. 通过 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(二)

    我们上一篇<基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)>主要讲解了如何搭建一个实时数据通讯服务器,客户端与服务端是如何通讯的,相信通过上一篇的讲解,再配 ...

  5. CSS魔法堂:重拾Border之——不仅仅是圆角

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  6. 微信小程序,我的英雄列表

    最近微信小程序炒得火热,就跟成都的这个房价一样.昨天我也尝试了一下,做了一个自己的英雄列表.今天将自己的制作过程记录于此. 1.下载微信开发者工具 官网链接:https://mp.weixin.qq. ...

  7. 微信小程序(应用号)开发体验

    昨天微信小程序(应用号)内测的消息把整个技术社区炸开了锅, 我也忍不住跟了几波,可惜没有内测资格,听闻破解版出来了, 今天早上就着原来的项目资源试开发了一下,总结一下体验. 总体体验 开发效率高,6: ...

  8. JQuery文件上传插件ajaxFileUpload在Asp.net MVC中的使用

    0 ajaxFileUpload简介 ajaxFileUpload插件是一个非常简单的基于Jquery的异步上传文件的插件,使用过程中发现很多与这个同名的,基于原始版本基础之上修改过的插件,文件版本比 ...

  9. mysql 处理 NULL

    1.如果为空返回0 select ifnull(null,0) 2.如果为空返回0,否则返回1 select if(isnull(col),0,1) as col. MYSQL 中的IFNULL函数 ...

  10. MySQL如何利用索引优化ORDER BY排序语句

    MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通 ...