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
a 新增 a 的后面可以接字串而这些字串会在新的一行出现(目前的下一行)
c 取代 c 的后面可以接字串这些字串可以取代 n1,n2 之间的行
d 删除因为是删除啊所以 d 后面通常不接任何咚咚
i 插入 i 的后面可以接字串而这些字串会在新的一行出现(目前的上一行)
p 列印亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s 取代可以直接进行取代的工作哩通常这个 s 的动作可以搭配正规表示法例如 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‘ #替换ruby为bird
[[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详解的主要内容,如果未能解决你的问题,请参考以下文章