设为首页 收藏本站
查看: 1160|回复: 0

[经验分享] Linux sed 简单操作

[复制链接]

尚未签到

发表于 2017-7-9 06:28:45 | 显示全部楼层 |阅读模式
  一、sed简介

sed是一种在线的编译器,它一次处理一行内容,将内容存储在临时的缓冲区中,接着用sed命令处理缓冲区的内容,处理完后将缓冲区的内容送往屏幕。(默认不更改原文件内容,除非使用重定向存储输出)

二、sed使用参数

格式:[iyunv@www ~]# sed  [-nefr]  [动作]
选项与参数:
-n :使用安静(silent)模式。取消默认原有输出,只显示特殊处理的内容。
-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 就是啦!



############################sed练习##################################

sed练习案例
1、将/etc/passwd的内容以行号列出来,并将2-35行内容删除
[iyunv@localhost ~]# nl /etc/passwd | sed '2,35d'     
DSC0000.png   注意:原文件内容并没有删除,只是显示的时候删除了2-35行内容


2、在第二行后面添加 "I am studing linux"[在第三行显示]
[iyunv@localhost ~]# nl /etc/passwd | sed '2a I am studing linux'
a  (add)新增一行, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
DSC0001.png
注意:如果添加多行,则需要在命令的结尾打上\,然后按住ctrl+回车 换行输入


[iyunv@localhost ~]# nl /etc/passwd | sed '2a I am studing linux\
drink beer?'
DSC0002.png
3、以行单位替换显示:将2-35行的内容替换成“NO number 2-35”显示
[iyunv@localhost ~]# nl /etc/passwd | sed '2,35c NO number 2-35'
c (change),替换显示
DSC0003.png

4、寻找数据并显示   从/etc/passwd文件中查找出root,并只显示root所在行
[iyunv@localhost ~]# nl /etc/passwd | sed -n '/root/p'
DSC0004.png
5、数据搜索并执行命令

搜索/etc/passwd,找到root对应的行,把bash替换为blueshell,再输出这行 。【执行后面花括号中的一组命令,每个命令之间用分号隔开】
[iyunv@localhost ~]#  nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
DSC0005.png
如果只替换第一个关键字就退出可在后面添加;q
DSC0006.png

6、数据搜索替换
格式:sed ‘s#XXX#MMM#g’ 文件
[iyunv@localhost ~]# sed -n 's#oldboy#network#gp' test.txt
DSC0007.png   sed -r 's#(.*) cisco#\1#g' test.txt

-r 代表进行正则表达式批评
(.*) cisco 代表任意内容并以cisco结尾的关键字
\1 取出正则表达式中第一个()里面代表的内容 DSC0008.png

7.只查看wen.txt文件(100行)内的第20-30行

① sed -n '20,30p' wen.txt  ----最简单快捷的方式
DSC0009.png   ②head -30 wen.txt|tail -11 ----效率最低,尽量不用
DSC00010.png


head -n 取出文件的前n行,默认是前10行,例如取前3行则是 head -3
tail -n 取出文件的后n 行,默认是后10行,例如取出后11行,则是 tail -11
【tail -f  文件名 】可以跟踪文件尾部的变化,tail -f 可以简写为tailf
③  awk '{if(NR>19&&NR<31) printf $1"\n"}' wen.txt
     awk '{if(NR>19&&NR<31) print $1}' wen.txt
DSC00011.png
DSC00012.png

  注意:如果采用关键字printf则默认情况下是没有换行的,必须在后面加“\n”,如果是采用print,则默认情况下是有换行,无需加“\n”

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-391836-1-1.html 上篇帖子: OpenFlow硬件交换机制作及刷机教程 下篇帖子: WIFI: N, Legacy and AC
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表