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‘ 要替换的字符串可以用正则表达式# sed -n ‘/ruby/p‘ ab | sed ‘s/ruby/bird/g‘#替换ruby为bird# sed -n ‘/ruby/p‘ ab | sed ‘s/ruby//g‘#删除ruby
插入# sed -i ‘$a bye‘ ab#在文件ab中最后一行直接输入"bye"Hello!ruby is me,welcome to my blog.endbye
删除匹配行
sed -i ‘/匹配字符串/d‘ filename注若匹配字符串是变量则需要“”而不是‘’。记得好像是
替换匹配行中的某个字符串
sed -i ‘/匹配字符串/s/替换源字符串/替换目标字符串/g‘ filename