Linux中的sed详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中的sed详解相关的知识,希望对你有一定的参考价值。

Sed简介

Sed取各种内容 Stream Editor  流式编辑器 又称行编辑器每次只编辑一行。Sed工作是在“模式空间”中进行的并不操作源文件。对源文件无危害。

Sed使用格式

sed [-nefri] ‘command’ 输入文本

 

sed使用参数

-n 使用安静(silent)模式。在一般 sed 的用法中所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e 直接在命令列模式上进行 sed 的动作编辑

-f 直接将 sed 的动作写在一个文件内 -f filename 则可以运行 filename 内的 sed 动作

-r sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

-i 直接修改读取的文件内容而不是输出到终端。

 

动作说明 [n1[,n2]]function

n1, n2 不见得会存在一般代表『选择进行动作的行数』举例来说如果我的动作是需要在 10 到 20 行之间进行的则『 10,20[动作行为

 

function

新增 的后面可以接字串而这些字串会在新的一行出现(目前的下一行)

取代 的后面可以接字串这些字串可以取代 n1,n2 之间的行

删除因为是删除啊所以 后面通常不接任何咚咚

插入 的后面可以接字串而这些字串会在新的一行出现(目前的上一行)

列印亦即将某个选择的数据印出。通常 会与参数 sed -n 一起运行

取代可以直接进行取代的工作哩通常这个 的动作可以搭配正规表示法例如 1,20s/old/new/g

 

企业面试题

执行命令取出 linux 中 eth0 的 IP cut有能力也可分别用awksed命令答。

grep命令实现

技术分享 

cut命令来实现

技术分享 

awk来实现

[[email protected] ~]# ifconfig eth0|grep "inet addr"|awk -F ":" ‘{print $2}‘

192.168.1.49  Bcast

[[email protected] ~]# ifconfig eth0|grep "inet addr"|awk -F ":" ‘{print $2}‘|awk ‘{print $1}‘

192.168.1.49

[[email protected] ~]# ifconfig eth0|grep "inet addr"|awk -F "[: ]" ‘{printf $13}‘

192.168.1.49

[[email protected] ~]# ifconfig eth0|grep "inet addr"|awk -F "[: ]+" ‘{printf $4}‘

192.168.1.49

[[email protected] ~]# ifconfig eth0|awk -F "[: ]+" ‘NR==2 {printf $4}‘

192.168.1.49

sed基础正则替换语法

技术分享 

处理技巧

处理需要的目标获取的字符串如上文的ip前面的字符串一般用以……开头^.*来匹配开头匹配的结尾写上实际的字符如“^.*addr:”表达式就匹配“     inet addr:

而处理需要的目标后的内容一般在匹配的开头写上实际的字符而结尾是用以……结尾(.*$)来匹配。如Bcast:.*$部分表示匹配“ Bcast:192.168.1.255  Mask:255.255.255.0

MAC地址

技术分享 

此题是处理目标前的内容所以用“^.*HWaddr”匹配“eth0   Link encap:Ethernet  HWaddr”。

[[email protected] ~]# ifconfig eth0|sed -n ‘s#^.*addr:\(.*\)  BCAST.*$#\1#gp‘

Sed小括号分组功能

技术分享

实例

技术分享 

Sed命令替换功能小结

  技术分享

替换一行中的某部分

  格式sed ‘s/要替换的字符串/新的字符串/g‘   要替换的字符串可以用正则表达式
     [[email protected] ruby] # sed -n ‘/ruby/p‘ ab | sed ‘s/ruby/bird/g‘    #替换rubybird
   [[email protected] ruby] # sed -n ‘/ruby/p‘ ab | sed ‘s/ruby//g‘        #删除ruby

    插入
     [[email protected] ruby] # sed -i ‘$a bye‘ ab         #在文件ab中最后一行直接输入"bye"
     [[email protected] ruby]# cat ab
     Hello!
     ruby is me,welcome to my blog.
     end
     bye

     删除匹配行

      sed -i ‘/匹配字符串/d‘  filename  注若匹配字符串是变量则需要“”而不是‘’。记得好像是

      替换匹配行中的某个字符串

      sed -i ‘/匹配字符串/s/替换源字符串/替换目标字符串/g‘ filename

 

 


本文出自 “柠檬草的味道” 博客,请务必保留此出处http://nmcdwd.blog.51cto.com/11299841/1757990

以上是关于Linux中的sed详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux文本处理三剑客grepsedawk用法详解

Linux之sed详解

linux awk命令详解

Linux的awk、grep、sed工具,实现文本查找、编辑 、格式化

linux文本处理三剑客之grep命令详解

Linux学习011sed命令详解