zoukankan      html  css  js  c++  java
  • linux sed命令详解

    1、定位

    定位一行

    x:行号
    sed -n '10p' passwd
    nl passwd | sed -n '10p'
    /pattern/:正则
    sed -n '/abc/p' passwd

    [root@idtp4 test]# nl -ba passwd |sed -n '/root/p'
         1  root:x:0:0:root:/root:/bin/bash
        11  operator:x:11:0:operator:/root:/sbin/nologin
    [root@idtp4 test]#

    定位几行

    x,y:行号
    nl passed | sed -n '10,20p'
    /pattern/,x:正则
    sed -n '/mail/,/abc/p' passwd
    x,y!:不选择这一行
    nl passwd |sed -n '10!p'
    nl passwd | sed -n '10,20!p'

    间隔几行

    first~step
    first:开始行
    step:步进
    nl passwd | sed -n '1~2p'

    二、基本操作命令

    -a(追加行)/i(插入行)
    -c(替代行)
    -d(删除行)

    $a:在文件末尾追加内容

    #在环境变量末尾追加内容
    #
    为换行
    [root@idtp4 test]# sed -i '$a export LRX_HOME=
    export path='  profile
    [root@idtp4 test]# tail -5f profile
    export PATH=$PATH:$ACCUMULO_HOME/bin
    export ANT_HOME=/software/apache-ant-1.9.13/bootstrap
    export PATH=$PATH:$ANT_HOME/bin
    export LRX_HOME=
    export path=

    如果想在添加的内容开头加空格,就要在$a后加入转义符“”。

    #添加空格对齐
    [root@idtp4 test]# sed -i '$a  export LRX_HOME
    export path' profile
    [root@idtp4 test]# tail -5f profile
    export PATH=$PATH:$ACCUMULO_HOME/bin
    export ANT_HOME=/software/apache-ant-1.9.13/bootstrap
    export PATH=$PATH:$ANT_HOME/bin
      export LRX_HOME
    export path

    三、常用命令

    删除空行

    sed '/^$/d'  filename

    替换操作

     s

    分隔符:/
    全局替换:g

    sed 's/nologin/login/' passwd
    sed 's/:/%/g' passwd

    打印时用-n 和p。

    替换时用s 和g(全局)。

     转换大小写

    u l:对首字母转大写、小写
    U L:对一串字符转大写、小写

    sed 's/^[a-z-_]+/u&/' passwd
    #将文件夹下的.txt文件名转换为大写
    ls *.txt | sed 's/^w+/U&/'

    其中,&表示替换前的全部内容。

    [root@idtp4 test]# ls |sed 's/.*/u&/'
    123.txt
    Abc.txt
    Access_log
    Passwd
    Profile
    Test.txt
    [root@idtp4 test]# ls |sed 's/.*/U&/'
    123.TXT
    ABC.TXT
    ACCESS_LOG
    PASSWD
    PROFILE
    TEST.TXT
    [root@idtp4 test]# ls |sed 's/.*/l&/'
    123.txt
    abc.txt
    access_log
    passwd
    profile
    test.txt

    四、括号

    ()

    • 括号代表指代内容,可以用1,2指代括号里的内容。
    • 括号要转义,前面要加转义符。

    文件里有:w1w2w3的内容,要取w2,可以写为:

    sed  's/w1(w2)w3/1/'

    结果为w2。

    # 取到第一个ip
    [root@idtp4 test]# ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.17.166.190  netmask 255.255.240.0  broadcast 172.17.175.255
            ether 00:16:3e:0e:a4:48  txqueuelen 1000  (Ethernet)
    [root@idtp4 test]# ifconfig|sed -n '/inet.*bro/p' |sed 's/inet+s([0-9.]+).snet.*$/1/'
            172.17.166.190

    也可以写成:

    # 取到第一个ip
    [root@idtp4 test]# ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.17.166.190  netmask 255.255.240.0  broadcast 172.17.175.255
            ether 00:16:3e:0e:a4:48  txqueuelen 1000  (Ethernet)
    [root@idtp4 test]# ifconfig|sed -n '/inet.*bro/p'|sed 's/inet.*s([0-9.]+).*netmask.*s([0-9.]+).*broadcast.*s([0-9.])/3/'
            172.17.175.255

    [ ]

    • 表示从里面取任意值。
    #0到9中任意的值,包含点,点需要转义
    [0-9.]
    #a到z的任意值,包含-,以括号里面的值开头,a到z是连续的,连续的用短线连接,结束连续后面要先接下划线,再接短线
    ^[a-z_-]

    +:表示1个以上。

    ^:表示开头。

    $:表示结束。

    &:表示替换前的全部内容。

    {}:同时执行多个sed命令。

    #取passwd里的用户名,uid,gid
    [root@idtp4 test]# sed 's/([a-z_-]+):x:([0-9]+):([0-9]+):.*$/1,2,3/' passwd
    root,0,0
    bin,1,1
    daemon,2,2

    五、r和w

    r:读,不会改变文件内容

    w:写,会改变文件内容,覆盖写

    [root@idtp4 test]# cat 123.txt
    123
    456
    789
    [root@idtp4 test]# cat abc.txt
    abc
    qwe
    sd
    #将读取123.txt内容,并加入到abc.txt的第一行后面,不改变文件内容
    [root@idtp4 test]# sed '1r 123.txt' abc.txt
    abc
    123
    456
    789
    qwe
    sd
    [root@idtp4 test]# cat 123.txt
    123
    456
    789
    [root@idtp4 test]# cat abc.txt
    abc
    qwe
    sd
    [root@idtp4 test]# cat 123.txt
    123
    456
    789
    [root@idtp4 test]# cat abc.txt
    abc
    qwe
    sd
    #将abc.txt的第一行写入到123.txt里,覆盖写
    [root@idtp4 test]# sed '1w 123.txt' abc.txt
    abc
    qwe
    sd
    [root@idtp4 test]# cat 123.txt
    abc
    [root@idtp4 test]# cat abc.txt
    abc
    qwe
    sd

    q:退出

    #打印到第10行,退出
    [root@idtp4 test]# nl -ba passwd |sed '10q'
         1  root:x:0:0:root:/root:/bin/bash
         2  bin:x:1:1:bin:/bin:/sbin/nologin
         3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
         4  adm:x:3:4:adm:/var/adm:/sbin/nologin
         5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
         6
         7  sync:x:5:0:sync:/sbin:/bin/sync
         8  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
         9  halt:x:7:0:halt:/sbin:/sbin/halt
        10  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@idtp4 test]#

    六、命令行格式

    -i:修改文件内容

    -n:忽略默认输出

    [root@idtp4 test]# nl -ba passwd|sed -n '10p' 
    10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@idtp4 test]#

    -e:跟{}一样,可以同时写入多个命令

    #删除2到3行,同时将冒号替换为%号
    [root@idtp4 test]# nl -ba passwd |sed -e '10,20d' -e 's/:/%/g'
         1  root%x%0%0%root%/root%/bin/bash
         4  bin%x%1%1%bin%/bin%/sbin/nologin
         5  daemon%x%2%2%daemon%/sbin%/sbin/nologin
         6  adm%x%3%4%adm%/var/adm%/sbin/nologin
         7  lp%x%4%7%lp%/var/spool/lpd%/sbin/nologin
    [root@idtp4 test]#

    七、脚本格式

    sed -f scriptfile file

    每天进步一点点,快乐生活多一点。
  • 相关阅读:
    安装提示设备为允许启用的解决办法
    xargs命令
    MariaDB链接超时优化
    灵活QinQ配置
    批量删除.pyo后缀的文件
    netcat的使用
    xxe(xml外部实体注入)
    渗透测试前:信息收集
    windows文件命名特性利用漏洞
    ssrf(Server-Side Request Forgery)
  • 原文地址:https://www.cnblogs.com/yiruliu/p/10003956.html
Copyright © 2011-2022 走看看