Linux运维文本处理三剑客之sed命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维文本处理三剑客之sed命令相关的知识,希望对你有一定的参考价值。

一· sed简介


 与Vi等全屏编辑器不同,sed是一个非交互式的文本编辑器,它可以对文本文件和标准输入进行编辑,    标准输入可以来自键盘、文件重定向、字符串、变量,甚至来自管道的文本。sed是对文本中的行进行    逐行处理。

   sed只是对缓冲区中原始文件的副本进行编辑,并不编辑源文件。如何需要保存改动的内容,需要将输    出重定向到另一个文件,可以使用下面格式的命令:

   sed ‘sed命令‘ input-file > result-file

二· sed调用的二种方式:

   1.在shell命令行输入命令调用sed,格式为:

      sed [option] ‘sed命令‘ 输入文件

      例:sed -n    ‘1,5p‘  /etc/inittab

    注意sed命令需要用单引号引起来

   2. ./sed 脚本文件 输入文件


三· sed 常用的选项

-n : 表示不打印所有行到标准输出

-e:表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令可省略

-r:表示可以使用扩展正则表达式元字符

-i:直接修改原文件

四· 文本定位方式

空为全局:即不定位行号为作用全文

x:x为指定精确行号  

x,y:指定从x到y的行号范围

/pattern/:查询包含模式的行

/pattern/pattern/:查询包含两个模式的行

/pattern/,x:从与pattern匹配 的行到x号的行之间的行

x,/pattern/:从x号行到与pattern匹配的行之间的行

x,y!:查询不包括x和y行之间范围的行

!不能用于关键字匹配,无法表示不与/pattern/匹配的行

$: 表示最后一行


例:  sed -n ‘/\./p‘ /etc/inittab   匹配 . 符号

         sed -n ‘$p‘   /etc/inittab    打印最后一行

         sed -n ‘2,10!p‘ /etc/inittab  打印不在2至10行内的行


五· 基本编辑命令

i \ : 在匹配行的前面插入文本

a \: 在匹配行的后面插入文本

c \:将所匹配的文本行利用新文本替代(整行替换)

d:删除指定行

w:写入到一个新文件

r:从文本中读入文本

y:字符变换,将一系列字符变换为相应字符,对字符逐个处理

     sed ‘y/12345/678910/‘ input  (被变换的字符序列/变换的字符序列/)

     要求被变换的字符序列和变换的字符序列等长,否则报错

l:显示控制字符(非打印字符)

q:完成指定地址的匹配后立即退出

s:将所匹配的文本行利用新文本替换,和c \相比,s可以替换字符串,而c \只能替换整行

     s/被替换的字符串/新字符串/[替换选项]

     s/pattern/string/g

     被替换字符串可以用正则表达式,而新字符串不可以

     如: s/m.*l/lx/g (/符号可以换成@,#,%等符号,s#m.*l#lx#g)

     还可以指定替换第几次匹配的关键字,只需在替换的选项上加相应数字,1-512之间

     如:sed -n ‘s/mxl/lx/2p‘ (替换第2次匹配到的mxl字符为lx)


{}:指定在定位行上能执行的命令组,类似于选项-e    

     例: sed -n ‘/mxl/p‘ -e ‘/mxl/=‘ /etc/inittab 等价于

             sed -n ‘/mxl/{p;=}‘ /etc/inittab

             sed -n ‘/mxl/{s/m/M/g;s/x/X/g;}‘ /input












本文出自 “冷月葬玉魂” 博客,请务必保留此出处http://mxlmgl.blog.51cto.com/9834691/1753969

以上是关于Linux运维文本处理三剑客之sed命令的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)

Linux文本处理三剑客之sed

Linux文本处理三剑客之sed

Linux 篇 | 文本处理三剑客之SED

linux文本处理三剑客之sed,原来只需要掌握这些!!!

linux文本处理三剑客之sed,原来只需要掌握这些!!!