一、四剑客之sed
sed是一种流编辑器,主要用于文本处理,能够完美的配合正则表达式使用。处理时,把当前处理的行存储在临时缓冲区,成为"模式空间"
二、sed参数
1.常用参数
****-i 直接修改文件内容,而不是输出到终端。****
-e 以指定的脚本来处理输入的文本文件
-r 启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项
-f 以指定的脚本文件来处理输入的文本文件
-h或--help 显示帮助
-n或--quiet或--silent 仅显示script处理后的结果
-V或--version 显示版本信息
2.动作指令
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :替换,通常这个 s 的动作可以搭配正规表示法,如 1,20s/old/new/g
3.语法格式
sed [-hnV][-e<script>][-f<script文件>][文本文件]
显示信息:
输出奇数行: sed -n 'p;n' test.txt
输出偶数行: sed -n 'n;p' test.txt
显示第3行信息: sed -n '3p' test.txt
显示1~3行信息: sed -n '1,3p' test.txt
显示1、3行信息: sed -n '1p;3p' test.txt
添加信息:
在第四行前添加test: sed '4i test' cats.txt
在第四行后添加test1: sed '4a test1' cats.txt
最后一行添加: sed -i '$a test2' cats.txt # $匹配最后一行
在ccat后面添加test2: sed -i '/^ccat/a test2' cats.txt
在ccat前面添加test3: sed -i '/^ccat/i test3' cats.txt
删除信息:
删除第3行: sed -i '3d' cats.txt
删除3-5行: sed '3,5d' cats.txt
删除最后1行: sed '$d' cats.txt | cat -n #
删除包含dog的行: sed '/dog/d' cats.txt
删除包含cat&Cat行: sed '/^[cC]at/d' cats.txt
删除cat&Cat且过滤掉空行: sed '/^[cC]at/d' cats.txt | sed '/^$/d'
4.实例
#1.取出IP地址
[ Nginx ~] #ifconfig ens160 | sed -rn '2s/^.*inet.(.*)net.*/\1/p'
10.1.0.3
# sed -r 's#(.*)#\1#g' \1 是配合括号()使用的,引用的是括号里匹配的内容(后项引用前项)
[ Nginx ~] #ip a show ens160 | sed -rn '3s/^.*inet.(.*)\/.*/\1/p'
10.1.0.3
#2.关闭SELINUX
sed -i 's/^SELINUX=.*/SELINUX=Permissive/' /etc/selinux/config
#3.删除配置文件空行和注释
sed -i '/^#/d;/^$/d' /etc/nginx/nginx.conf