Sed命令

Sed是一种在线编辑器、行编辑器,一次处理一行内容。sed自己也是一个管道命令,能够分享standard input 的,并且sed还能够将数据进行替换、删除、新增、选取特定行等的功能呢。正则表达式

          选项介绍bash

sed [-nefr] [动做]编辑器

-n:使用安静模式。在通常sed的用法中,全部来自stdin的数据通常都会列出屏幕上,但若是加上-n参数后,则只有通过sed特殊处理的那一行才会被列出来。ide

-e:直接在命令行模式上进行sed的动做编辑spa

-f:直接将sed的动做写在一个文件内,-f filename 则能够执行filename内的sed动做命令行

-r:sed的动做支持的是扩展正则表达式的语法(默认是基础正则表达式语法)orm

-i:直接修改读取的文件内容,而不是由屏幕输出。ip


动做说明: [n1[,n2]]function字符串

n1,n2:不见得会存在,通常表明选择进行动做的行数,举例来讲,若是个人动做是须要在10到20行之间进行的,则“10,20[动做行为]input


a:新增,a的后面能够接字符串,而这些字符串在新的一行出现(目前的下一行)

c:替换,c后面的能够接字符串,这些字符串能够替换n1,n2之间的行!

d:删除,由于是删除,因此d后面一般不跟任何参数;

i:插入,i的后面能够接字符串,而这些字符串户在新的一行出现(目前的上一行)“

p:打印,也就是将某个选择的数据打印出来,一般p会与参数 sed -n 一块儿运行;

s:替换,能够直接进行替换的工做。一般这个s的动做能够搭配

范例1,将/etc/passwd的内容列出并打印行号,同时,请将第2~5行删除。

[root@localhost ~]# nl /etc/passwd | sed '2,5d'

     1root:x:0:0:root:/root:/bin/bash

     6sync:x:5:0:sync:/sbin:/bin/sync

     7shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

     8halt:x:7:0:halt:/sbin:/sbin/halt

看到了吧?sed的动做为‘2,5d’,那个d就是删除。由于2~5都被删除了,显示的数据就没它们了,另外,本来应该执行sed -e 才对 没有 -e 也行,注意后面sed 格式 ‘ ’。

删除单行就sed ‘#d’ #号表示你删除的第几行,要是从第3行删除到行尾,就sed ‘3,$d'

$表明的是最后一行。


例2.我要在第2行后面加上,hello word,怎么办?

[root@localhost ~]# sed '2a hello word' < /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

hello word

daemon:x:2:2:daemon:/sbin:/sbin/nologin

标准输出给sed,2a就是要在第2行后面添加,hello word,把2a换成2i就表示在第二行的前面添加。

例3 。咱们还能够添加多行在里面。

[root@localhost ~]# nl /etc/passwd | sed '2a sunwukeng\nzhuba\ntangdoudou\nshasha'

     1root:x:0:0:root:/root:/bin/bash

     2bin:x:1:1:bin:/bin:/sbin/nologin

sunwukeng

zhuba

tangdoudou

shasha

要换行就\n;

以行为单位的替换与显示功能

例4.我想将2~5行的内容换成"four to kill"请看下面

[root@localhost ~]# nl /etc/passwd | sed '2,5c four to kill'

     1root:x:0:0:root:/root:/bin/bash

four to kill

     6sync:x:5:0:sync:/sbin:/bin/sync

看见吗?我来次4杀,2到5 c表示替换,后面的内容,,

例5.咱们还能够打印想要的行,我想要第6行,

[root@localhost ~]# nl /etc/passwd | sed -n '6p'

     6sync:x:5:0:sync:/sbin:/bin/sync

这要加-n的,表示安静,不加-n,会打印全文,打印2次6行,,这样你就很闹腾,,

部分数据的查找并替换的功能,、

除了整行的处理模式以外,sed还能够用行为单位进行部分数据的查找并替换功能,基本上sed的查找与替换与vi相相似,它像这样子滴:

sed  's/要被替换的字符/被替换的字符/g'

 ///或者###或者@@@  s是搜索, g在全文,

例6.取出ip地址,下面我用grep ,sed,

[root@localhost ~]# ifconfig | grep "netmask" | sed 's/^.*inet[[:space:]]*//g' | sed\ 's/[[:alpha:]].*//g'

127.0.0.1  

192.168.122.1  

找出带有ip地址的行,而后,就sed替换,这都是套路,把不用的统统替换没有,删除,

例7,直接修改文件内容;

你觉得sed只会这样的功能吗?大声说no,sed能够直接修改文件的内容,而没必要使用管道命令或数据流重定向。不过这个操做会直接修改文件,全部要慎重,不要拿系统配置文件搞,

[root@localhost ~]# sed -i 's@^@#&@g' /root/bin/4c.sh 

[root@localhost ~]# cat /root/bin/4c.sh

##!/bin/bash

#

#if [ $1 == '--add' ];then

#    for I in `echo $2 | sed 's/,/ /g'`;do

#        if id $I &> /dev/null;then

#        echo "existing"

#        else

#        useradd $I

#    echo "$I" | passwd --stdin $I &> /dev/null

#        echo "finished"

#      fi

#      done

#elif [ $1 == '--del' ];then

#    for I in `echo $2 | sed 's/,/ /g'`;do

#     if id $I &> /dev/null;then

#      userdel -r $I

#      echo "deleting completed"

#      fi

#     done

#else

#    echo "-NOT"

#fi

[root@localhost ~]# 

相关文章
相关标签/搜索