sed 流式编辑器

使用方式:

1,前置指令 | sed 选项  定址符指令

2,sed 选项  定址符指令   被处理文档

选项:

-n 屏蔽默认输出

 -i写入文件 

 -r支持扩展正则

指令:

p输出 

 d删除 

 s替换

    sed -n '1p' user        //输出第1行

   sed -n '2p' user    //输出第2行

   sed -n '3p' user    //输出第3行

   sed -n '2,4p' user   //输出第2~4行

   sed -n '2,+1p' user  //输出第2行以及后面1行

   sed -n '2p;4p' user  //输出第2行,第4行

sed -n '/^root/p' user  //在sed中使用正则表达式输出以root开

头的行

   grep "^root" user  //效果同上

 egrep"^root|^bin" user  //找root或者bin开头的行 

 sed -nr '/^root|^bin/p' user  //在sed中查找,-r使用扩展正

则,效果同上

   sed -n '=' user    //查看所有行号

 sed -n '$=' user   //查看最后一行的行号,相当于查看文档

总共有几行

   

  sed  '1d' user   //删第1行

  sed  'd' user   //删所有

  sed  '3d' user  //删第3行

  sed  '2,5d' user   //删2~5行

  sed  '4,+2d' user  //删4行以及后面2行

  sed  '1d;3d' user   //删第1行,第3行

sed  '$d' user   //删除最后一行

  sed -n '$p' user  //查看最后一行

sed -n '1!p' user   //查看除了第1行以外的行, !代表取反

sed中的替换,使用 s/old/new/

vim test.txt    //准备素材,写入下列内容

2017 2011 2018

2017 2017 2024

2017 2017 2017

sed 's/2017/8888/' test.txt  //替换所有行的第1个2017为8888

sed '1s/2017/8888/' test.txt  //替换第1行的第1个2017

sed '2s/2017/8888/' test.txt  //替换第2行

sed '1,2s/2017/8888/' test.txt  //替换1~2行

sed 's/2017/8888/2' test.txt   //替换所有行的第22017

sed 's/2017/8888/3' test.txt   //替换所有行的第3个2017

sed '/2011/s/2017/8888/' test.txt  //替换有2011的行的第12017

sed 's/2017/8888/g' test.txt   //替换所有行的所有个

sed -n 's/root/6666/p'  /etc/passwd  //替换每行第1个root,并只显示被替换的行

sed -n 's/root/6666/2p'  /etc/passwd  //替换每行第2个root,并只显示被替换的行

sed -n 's/root/6666/gp'  /etc/passwd  //替换每行的所有root

sed '3s/2017/8888/;3s/2017/8888/' test.txt  //替换第3行的第1个和第2个2017

------------------------------------------------------------

尝试将user文档中的/bin/bash替换成/sbin/sh

sed 's//bin/bash//sbin/sh/' user    //常规手段替换,内容会与替换冲突,替换失败

sed 's/\/bin\/bash/\/sbin\/sh/' user  //使用\转义符号,可以成功,但不方便

sed 's!/bin/bash!/sbin/sh!' user   //更改替换的间隔符号是最理想方法

sed 's(/bin/bash(/sbin/sh(' user   //效果同上

Seds替换的高级应用

1)删除文件中每行的第二个、最后一个字符

sed 's/.//2;s/.$//' test    分两个步骤完成,中间用分号

隔开,第一步将每行的第二个任意字符替换成空,第二

步将每行的最后一个任意字符替换成空即可

2)删除文件中所有的数字

sed -i 's/[0-9]//g' test    先找到任意数字,然后都替换成空

3)将文件中每行的第一个、倒数第1个字符互换

echo abc > abc            //创建素材

sed -r 's/(a)(b)(c)/\3\2\1/' abc  //替换abc时复制每一个字符,后面替换的内容用\数字粘贴,可以任意调换位置

echo xyz >> abc   //追加内容

sed -r 's/(a)(b)(c)/\3\2\1/' abc  //再用之前的方法无法替换第2行

sed -r 's/(.)(.)(.)/\3\2\1/' abc  //将具体字符用 . 替代即可将文档中的xyz修改成xyaz时,上述方案失灵

sed -r 's/^(.)(.*)(.)$/\3\2\1/' abc   //再次升级,分别找到第1个字符和最后1个字符,中间可以是任意

sed -r 's/^(.)(.*)(.)$/\3\2\1/' test   //达成需求

4)为文件中每个大写字母添加括号

sed -r 's/([A-Z])/(\1)/g' test  //先找到任意大写字母,然后保留,最后替换成带括号的状态

练习:

编写脚本,安装httpd服务,使用82号端口

#!/bin/bash

yum -y install httpd

sed -i '/^Listen 80/s/80/82/' /etc/httpd/conf/httpd.conf   //找到有Listen 80开头的行,替换80为82

systemctl restart httpd

运行脚本之后,使用curl 192.168.4.7:82测试或者火狐浏览器192.168.4.7:82

要关闭selinux与防火墙

setenforce 0    //如果脚本执行之前没关闭selinux,会报错

systemctl stop firewalld

--------------------------------------------------------------------

sed中除了常用的p d s 三个指令,还有a行下追加  i行上添加  c替换整行

sed 'a 666' user  //在所有行下追加666

sed '1a 666' user  //第1行下追加666

sed 'i 666' user   //所有行上添加666

sed '3i 666' user  //第3行上添加666

sed '2a 666' user   //第2行下追加666

sed 'c 666' user   //所有行替换成666

sed '/root/c 666' user  //找到有root的行替换成666

编写脚本,找到系统使用bash的账户名,然后按照“用户名 --> 密码” 的格式存储在一个文件中

"\s"可以匹配tab键和空格所敲出来的空格。

"\w"匹配数字、字母、下划线

sed的其它指令:

”a“行下追加,逐行处理,如果只处理第一行就用”1a“

”i“行上添加

”c“替换整行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值