Sed命令用法总结
2016-06-07 17:48
309 查看
一、Sed命令介绍
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
二、Sed命令格式
sed [options] 'command' file(s) sed [options] -f scriptfile file(s)常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。 -e∶直接在指令列模式上进行 sed 的动作编辑; -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作; -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法) -i∶直接修改读取的档案内容,而不是由萤幕输出。常用命令:
a ∶新增,a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~ b ∶lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾 c ∶取代,c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚; D ∶删除模板块的第一行 g ∶获得内存缓冲区的内容,并替代当前模板块中的文本 G ∶获得内存缓冲区的内容,并追加到当前模板块文本的后面 h ∶拷贝模板块的内容到内存中的缓冲区 H ∶追加模板块的内容到内存中的缓冲区 i ∶插入,i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行) l ∶列表不能打印字符的清单 n ∶读取下一个输入行,用下一个命令处理新的行而不是用第一个命令 N ∶追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码 p ∶打印模板块的行,即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~ p ∶P(大写) 打印模板块的第一行 q ∶退出Sed r ∶file 从file中读行 s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法 t ∶label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾 T ∶label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾 w ∶file 写并追加模板块到file末尾。 W file 写并追加模板块的第一行到file末尾 ! ∶表示后面的命令对所有没有被选定的行发生作用 = ∶打印当前行号码 # ∶把注释扩展到下一个换行符以前
三、应用举例
1、删除某行[root@localhost Linux] # sed '1d' ab #删除第一行 [root@localhost Linux] # sed '$d' ab #删除最后一行 [root@localhost Linux] # sed '1,2d' ab #删除第一行到第二行 [root@localhost Linux] # sed '2,$d' ab #删除第二行到最后一行2、显示某行
[root@localhost Linux] # sed -n '1p' ab #显示第一行 [root@localhost Linux] # sed -n '$p' ab #显示最后一行 [root@localhost Linux] # sed -n '1,2p' ab #显示第一行到第二行 [root@localhost Linux] # sed -n '2,$p' ab #显示第二行到最后一行3、增加一行或多行字符串
[root@localhost Linux]# cat ab Hello! Linux is me,welcome to my blog. end [root@localhost Linux] # sed '1a drink tea' ab #第一行后增加字符串"drink tea" Hello! drink tea Linux is me,welcome to my blog. end [root@localhost Linux] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea" Hello! drink tea Linux is me,welcome to my blog. drink tea end drink tea [root@localhost Linux] # sed '1a drink tea\nor coffee' ab #第一行后增加多行,使用换行符\n Hello! drink tea or coffee Linux is me,welcome to my blog. end4、替换一行或多行
[root@localhost Linux] # sed '1c Hi' ab #第一行代替为Hi Hi Linux is me,welcome to my blog. end [root@localhost Linux] # sed '1,2c Hi' ab #第一行到第二行代替为Hi Hi end5、替换一行中的某部分
格式:sed 's/要替换的字符串/新的字符串/g' (要替换的字符串可以用正则表达式) [root@localhost Linux] # sed -n '/Linux/p' ab | sed 's/Linux/bird/g' #替换Linux为bird [root@localhost Linux] # sed -n '/Linux/p' ab | sed 's/Linux//g' #删除Linux6、插入
[root@localhost Linux] # sed -i '$a bye' ab #在文件ab中最后一行直接输入"bye" [root@localhost Linux] # cat ab Hello! Linux is me,welcome to my blog. end bye7、删除匹配行
sed -i '/匹配字符串/d' filename (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是) 替换匹配行中的某个字符串 sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename
等等……
相关文章推荐
- spark 5、共享变量
- php cURL library is not loaded
- JDK1.8 集成了Base64加密解密包
- FPS游戏服务器设计的问题
- 树的计数问题和通过一个中序遍历序列和一个先序遍历序列来确定一棵二叉树
- 树的计数问题和通过一个中序遍历序列和一个先序遍历序列来确定一棵二叉树
- 学习java就要多看书!
- 乐学成语——显示主界面
- 使用SQL Profile稳定SQL语句的执行计划
- Java开发常用的在线工具
- ES各种错误解决
- 高级产品经理十八种能力
- Java泛型中E、T、K、V等的含义
- Linux 下安redis
- Java开发常用的在线工具
- 学习java的态度很重要!
- linux挂硬盘方法
- 利用R语言进行交互数据可视化(转)
- 使用HTML语法图文混排
- 字符串的旋转