文本处理三剑客--sed

官方参考文档:

http://www.gnu.org/software/sed/manual/sed.html

引号内含义:

自动打印p,删除d,保存到文件w file.txt,搜索替换s///,全局替换g,
区间2,5,奇数行1~2,匹配/ /,多条件’ ; ’

选项含义:

修改-i,备份+修改-i.bak,关闭自动打印-n,扩展正则表达式-r,多条件搜索-e,-f

基础案例:
# sed '2p' /etc/passwd #自动打印,再打印一遍第二行
# sed -n '2p' /etc/passwd #关闭自动打印,只打印第二行
# sed -n '1,4p' /etc/passwd #1-4行
# sed -n '/root/p' /etc/passwd #root所在行
# sed -n '2,/root/p' /etc/passwd #2行-root所在行
# sed -n '/^$/=' file.txt #只打印空行行号 

# sed -n -e '/^$/p' -e '/^$/=' file.txt #多条件,只打印空行及空行行号
# sed -e 's/dog/cat/' -e 's/hi/lo/' pets #多条件,搜索替换(只替换每行第一个)
# sed 's/test/mytest/g' example #全局替换
# sed –i.bak 's/dog/cat/g' pets #备份+编辑

# sed '/root/a\superman' /etc/passwd #行后 #root所在行后添加一行
# sed '/root/i\superman' /etc/passwd #行前
# sed '/root/c\superman' /etc/passwd #代替行
# nl /etc/passwd | sed '2a tea' #第2行后添加一行(显示行号)

# sed '/^$/d' file.txt #删除空行
# sed '1,10d' file.txt #删除1-10行
# nl /etc/passwd | sed '2,5d' #删除2-5行(显示行号)

# sed –n 's/root/&superman/p' /etc/passwd #单词后
# sed –n 's/root/superm·an&/p' /etc/passwd #单词前

实用案例:

#关闭selinux
# sed '/^SELINUX=/c SELINUX=enforcing' /etc/selinux/config 

#配置文件去掉#开头的行并保存到新文件中
# sed '/^#/d;w /data/httpd.conf' /etc/httpd/conf/httpd.conf 

#取出某时间段内的日志信息
# sed -n '/15:17:26/,/15:17:54/p' /var/log/yum.log 

#取出ifconfig命令中本机的IPv4地址
# ifconfig eth0 | sed -nr '2s/(^[^0-9]+)([0-9.]+)( .*$)/\2/p' #通用
# ifconfig eth0 | sed -nr '2s/^[^0-9]+([0-9.]+) .*$/\1/p' #通用
# ifconfig eth0 | sed -n '2s/^.*inet //;s@ netmask.*$@@p' #只适用centos7
# ifconfig eth0 | sed -nr '2s/(^[^0-9]+)([0-9.]+)( .*$)/\2/p' #只适用centos6
# ifconfig eth0 | sed -nr '2s/^[^0-9]+([0-9.]+) .*$/\1/p' #只适用centos6

#删除行首的#和空白字符
# sed -nr '/^#/s/^#([[:space:]]+)/\1/p' /etc/fstab

#取出目录名和基名
# echo  /etc/sysconfig/network-scripts/ |sed -r 's@(^/.*/)([^/]+)/?$@\1@'
/etc/sysconfig/
# echo  /etc/sysconfig/network-scripts/ |sed -r 's@(^/.*/)([^/]+)/?$@\2@'
network-scripts

#修改网卡信息
#在"空格+linux16"开头所在行的行尾添加" net.infname=0"
# sed -rn '/^[[:space:]]+linux16/s#(.*)#\1 net.ifnames=0 #p' /boot/grub2/grub.cfg

#在"GRUB_CMDLINE_LINUX"所在行的引号内末尾添加" net.infname=0"
# sed -r '/GRUB_CMDLINE_LINUX/s@(.*)"$@\1 net.ifnames=0"@' /etc/default/grub #分组替换
# sed -r '/GRUB_CMDLINE_LINUX/s@"$@ net.ifnames=0"@' /etc/default/grub #搜索替换

#变量使用
# sed 's/'''$var'''/wang/' /etc/passwd
wang:x:0:0:root:/root:/bin/bash
# sed "s/$var/wang/" /etc/passwd
wang:x:0:0:root:/root:/bin/bash

#取出包的架构及相同架构的个数
# ls /run/media/root/CentOS_7_x86_64/Packages
yum-utils-1.1.31-54.el7_8.noarch.rpm 
zenity-3.28.1-1.el7.x86_64.rpm
# ls *.rpm|sed -r 's/.*\.(.*)\.rpm$/\1/'|sort|uniq -c
# ls *.rpm|rev|cut -d. -f2|rev|sort|uniq -c
   1405 noarch
   2665 x86_64

#查看http配置文件,不包含#开头的
# sed '/^#/d;w /data/httpd.conf'   /etc/httpd/conf/httpd.conf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值