设为首页 收藏本站
查看: 1357|回复: 6

SHELL之sed

[复制链接]

尚未签到

发表于 2013-4-27 14:01:24 | 显示全部楼层 |阅读模式

                                       SHELL之sed

                  sed  编辑文本
sed:文本流编辑,,不与文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕
     是一种重要的文本过滤工具,使用一行命令或者使用管道与grep与awk相结合,非交互性文本流编辑
         man sed;  info sed
               sed '范围s/老字符/新字符/标记'  文件
     sed的命令格式: sed [选项]  sed命令  输入文件
         sed的脚本格式:sed [选项] -f  sed脚本文件  输入文件
                        sed脚本文件  [选项]   输入文件
                                eg: //sed [选项]  sed命令  输入文件
                                sed -e 's/root/tony/g' -e 's/bash/nologin/g' /etc/passwd      //sed [选项]  sed命令  输入文件
                               
                                eg: //sed [选项] -f  sed脚本文件  输入文件
                                vim    sss   //脚本的名字,添加下面两行
                                s/root/tony/g
                                s/bash/nologin/g
                        sed -f sss /etc/passwd         //sed [选项] -f  sed脚本文件  输入文
                            
                                eg: //sed脚本文件  [选项]   输入文件
                                vim    ss  //脚本的名字,脚本为sed的脚本,添加这两
                                #!/bin/sed -f
                                s/root/tony/g
                                s/bash/nologin/g
                        chmod +x ss     //加权限
             ./ss /etc/passwd                         //sed脚本文件  [选项]   输入文件
                       
         sed的命令选项:-n 不打印所有行到标准输出  ,-c下一个命令式编辑命令 , -f 正在调用sed脚本文件
                        -e只会显示给你看你修改的,但是不会对源文件进行操作
                                        -i不会显示给你看你修改的,直接对源文件已经操作了(-i与i\是有差别的)
         sed在文件中查询文本的方式:
             使用行号,可以是一个简单数字,或是一个行号范围
         使用正则表达式
                      x                                x为行号
                                          x,y                              表示行号从x到y
                                          /pattern                         查询包含模式的行
                                          /pattern /pattern                查询包含两个模式的行
                                          pattern/,x                       在给定行号上查询包含模式的行
                      x,/pattern/                      通过行号和模式查询匹配的行
                      x,y!                             查询不包含指定行号x和y的行                                          
                 基本sed编辑命令:
                 p         打印匹配行(和-n选项一起合用)
                 =         显示文件行号
                 a\        在定位行号后附加新文本信息
                 i\        在定位行号后插入新文本信息
                 d         删除定位行
                 c\        用新文本替换定位文本
                 s         使用替换模式替换相应模式
                 r         从另一个文本中读文本
                 w         写文本到一个文件
                 q         第一个模式匹配完成后推出或立即退出(不用和-n选项一起合用)
                 l         显示与八进制ACSII代码等价的控制符
                {}         在定位行执行的命令组,用分号隔开
                n          从另一个文件中读文本下一行,并从下一条命令而不是第一条命令开始对其的处理
                g          将模式2粘贴到/pattern n/
                y          传送字符,替换单个字符
sed默认打印全部行,sed -n默认不打印其他行,只打印与之相关的行

sed实现打印:用到的参数 -n和p一般结合用 还有=
eg:
    sed  '2p' score.txt                      打印第二行,其它的行也会打印,第二行会显示两遍
    sed -n '2p' score.txt                    打印第二行
    sed -n '1,4p' score.txt                  打印第一行到第四行
    sed -n '/los/p'  myfile.txt              打印包含los字符的那行  awk '$0 ~/los/' myfile.txt
        sed -n  '/\<los\>/p' myfile.txt          打印匹配有los这个单词的行
    sed -n '/root/,4p' /etc/passwd           打印从root行到第4行的内容
    sed -n '3,7!p' passwd                    打印匹配不在3-7行之间的
        sed -n '2,5!{=;p}' filename              打印匹配不在2-5之间的行和行号,先显示行号在显示行号的内容  
    sed -n '/^$/p' filename | wc -l          打印匹配空格的行,然后统计有多少行
        sed -n '/^$/{=;p}' filename              打印显示哪行是空格  ---->   sed -n  -e '/^$/p' -e '/^$/=' filename
    sed -n '/^$/=' file                             打印空行的行数 -----> awk '{if($0~/^$/) print NR}' file --->
                                                 grep -n '^$' file(会在行号后面加:) grep -n '^$' file | awk -F: '{print $1}' (去掉了:)
    sed -n '4,/los/p'  myfile.txt            打印第四行到los行中间的,包括los行
    sed '5 q' passwd                                打印前5行(q参数只能从1到那个数字的行)
    sed -n '/r*t/p' /etc/passwd              打印匹配r有0个或者多个(也可以理解含有t字母的行)  //*表示匹配前面的字符有任意个
        sed -n '/.r.*/p' passwd                  打印匹配有r的行并且r后面跟任意字符
        sed -n '/o*/p' passwd                    打印o字符重复任意次
        sed -n '/o\{1,\}/p' passwd               打印o字重复出现一次以上
        sed -n '/o\{1,3\}/p' passwd              打印o字重复出现一次到三次之间以上
       

sed实现添加:(对源文件添加的话就用-i参数)用到的参数 a\ or i\
eg:
    sed -i  '/jie/a\tom' myfile.txt               在含有jie的哪行的下面添加tom这行 or sed -i  '/jie/a tom' myfile.txt  
        sed -i '/root/a\how are you\nand you' passwd  添加多行用\n来转行
        sed -i  '/jie/i\tom1' myfile.txt              在含有jie的哪行的上面添加tom1这行
        sed -i 's/root/man &/p' passwd                在root的前面添加man这个字符(后面接p参数则添加了两行,不接p则只有一行)
        sed -i '1i\abc'  li                          在文件首行添加一行  or 用awk 'BEGIN{print "abc"}{print $0}' li
    sed -i '$a nihao' li                       在li文件末尾行在追加一行,在往下面继续追加多行可以用\n来换行   echo "nihao" >> li
                                                     or    awk '{print $0} END{print "bbb"}' 1  
        sed -i 's/^/nihao /g' 1                    在文件的每一行开头都加上nihao字符
        sed -i 's/$/tail /g' 1                      在文件的每一行行尾都加上tail字符
        sed -i -e 's/adm/OU/' -e '/OU/ a we find OU' passwd   //把asd改成OU并在OU的行追加 we find OU
         
sed实现删除(过滤):用到的参数 d  (不加-i参数一般适合查看)
eg:
    sed -n '/\#/!p'  /etc/vsftpd/vsftpd.conf             打印出以#开头的行,然后用!进行反选 ,\#是转义字符,则表示过滤掉以#开头的行
        sed -n '/^#/!{/^$/!p}'  /etc/vsftpd/vsftpd.conf      过滤掉以#开头的行和空格的行
    sed -e '/^#/d' -e '/^$/d'  /etc/vsftpd/vsftpd.conf   过滤掉以#开头的行和空格的行
        sed -e '/bash/d' /etc/passwd                         删除匹配字符bash的行
        sed -e  '/\<los\>/d' filename                        删除匹配单词los的行
    sed -e '1,4d' score.txt                              删除第一行到第四行
        sed -e  '1d'  file                                   删除首行
        sed -e '$d'   file                                   删除尾行
        sed -i -n '/\#/!p' 1                                 删除源文件以#开头的行
    sed -i 's/#//g'                                      表示把#换成空白(也可理解删除#号) 这种适合把一行里面的删除你不需要的信息
       
sed实现改写(替换):用到的参数 s和g连用  y  c\  w  n
eg:

        sed -i  '/jie/c\tom123' myfile.txt                 把含有jie的哪行替换成tom123这行sed -n  '/jie/ctom123' myfile.txt (两句都是一样)
        sed -i 's/root/tony/g'  /etc/passwd                替换
        sed -i 's/root/tom/2p' passwd                      替换root在这行第二次出现的
    sed -i '/bash/s/root/tony/' /etc/passwd           默认换掉第一root字符  bash是匹配的条件
        sed -i '/bash/s/root/tony/2' /etc/passwd           换掉root出现在的第二次的字符
        sed -i '/bash/s/root/tony/g' /etc/passwd            替换这行所有的root
        sed -i '/root/{s/bash/nologin/g;s/0/23/g}' passwd   在匹配root字符的行里面把bash替换nologin,0替换成23
        sed -i '/root/{n;s/bin/tom/g}' passwd                 用n参数在匹配root字符的后面一行里面的bin替换成tom
        sed -i 'y/abc/xyz/'  aa                             把aa文件中的第一个字符有包括abc的换成xyz,a换成x,b换成y,c换成z
    sed -i 's/root/va/w passwd1' passwd  把root换成va然后写到passwd1文件里面
        sed -i 's/root/(&)/pg' passwd ---->(root):x:0:0:(root):/(root):/bin/bash


sed实现查找(匹配的查找):
eg:
        用grep,sed,awk匹配某个字符出现的次数
         grep 'o*' passwd --color          or      sed -n '/o*/p' passwd   //o字符重复任意次   or    awk '$0~/o.*/ {print $0}' passwd
         grep 'o\{1,\}' passwd --color     or      sed -n '/o\{1,\}/p' passwd   //o字重复出现一次以上
           or                 awk --posix 'BEGIN{FS=":"}$0~/o{1,}/{print $0}' passwd
         grep 'o\{2,\}' passwd --color     or      sed -n '/o\{2,\}/p' passwd    //o字重复出现2次以上
              or             awk --posix 'BEGIN{FS=":"}$0~/o{2,}/{print $0}' passwd     //(要用--posix参数或者--re-interval参数)
用sed和awk不区分大小写的查询字符
    sed -n '/[aA][dD][mM]/p' passwd     or         awk 'BEGIN{FS=":"}/[aA][dD][mM]/{print $0}' passwd (BEGIN{FS=":"}可以不要)



sed其他经典的例子:
sed '$!N;s/\n/ /g' 1                       将一个文本的奇数行和偶数行合并
sed -n -e 2p -e 3p 1|sed '$!N;s/\n/ /'      第2 行和第3 行合并
eg:
[iyunv@Centos ~]# cat 3
add
nis
jiushi
wo yun
this is
[iyunv@Centos ~]# cat 2.sh
#!/bin/bash
m=`cat 3| grep "this"`
sed -i "/$m/d"  3
[iyunv@Centos ~]# cat 3 | grep "wo" | sh 2.sh   //用管道把过滤的内容在用管道去执行
[iyunv@Centos ~]# cat 3
add
nis
jiushi
wo yun
[iyunv@Centos ~]# cat 2.sh
#!/bin/bash
m=`cat 3| grep "this"`
sed -i "/$m/d"  3


处理以下文件内容,将域名取出并进行计数排序,如处理:
http://www.baidu.com/index.html
http://www.baidu.com/1.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html
得到如下结果:
域名的出现的次数 域名
3 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com
可以使用bash/perl/php/c 任意一种
[iyunv@localhost shell]# cat file | sed -e ' s/http:\/\///' -e ' s/\/.*//' | sort |
uniq -c | sort -rn
3 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com
[iyunv@codfei4 shell]# awk -F/ '{print $3}' file |sort -r|uniq -c|awk '{print
$1"\t",$2}'
3 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com


运维网声明 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-5535-1-1.html 上篇帖子: linux shell输入指令日志审计 下篇帖子: SHELL之grep

尚未签到

发表于 2013-4-27 14:08:55 | 显示全部楼层
很多女明星不红的原因是因为没有张开腿*^_^*

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

尚未签到

发表于 2013-5-18 13:44:59 | 显示全部楼层
帮你顶下哈!!

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

尚未签到

发表于 2013-5-22 02:32:43 | 显示全部楼层
床上运动也可以减肥的,你们都不知道吗?

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

尚未签到

发表于 2013-5-27 16:18:50 | 显示全部楼层
天塌下来你顶着,我垫着!

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

尚未签到

发表于 2013-6-2 17:48:32 | 显示全部楼层
关羽五绺长髯,风度翩翩,手提青龙偃月刀,江湖人送绰号——刀郎。

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

尚未签到

发表于 2013-6-6 16:56:18 | 显示全部楼层
沒有激情的亲吻,哪來床上的翻滾?

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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