zoukankan      html  css  js  c++  java
  • shell入门-sed-2替换功能

    sed的替换功能和vim语法挺像的

    把1到10行的nologin替换成login

    [root@wangshaojun ~]# sed '1,10s/nologin/login/g' 1.txt

    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/login
    daemon:x:2:2:daemon:/sbin:/sbin/login

    ....

    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin

    $

    把1到10行的/sbin/nologin改成login

    [root@wangshaojun ~]# sed '1,10s//sbin/nologin/login/g' 1.txt

    [root@wangshaojun ~]# sed '1,10s#/sbin/nologin#login#g' 1.txt

    [root@wangshaojun ~]# sed '1,10s@/sbin/nologin@login@g' 1.txt

    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:login
    daemon:x:2:2:daemon:/sbin:login

    ......

    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin

    .......

    $

    把全部的行改成login

    [root@wangshaojun ~]# sed 's#^.*$#login#g' 1.txt//////s表示替换不指定行数就是全部行//////^开头.*是任意个任意字符$结尾 意思是从开头到结尾是任意个任意字符///

    login
    login
    login
    .....

    $

    在每一行后面加一个login

    [root@wangshaojun ~]# sed 's#^.*$#&login#g' 1.txt
    root:x:0:0:root:/root:/bin/bashlogin
    bin:x:1:1:bin:/bin:/sbin/nologinlogin
    daemon:x:2:2:daemon:/sbin:/sbin/nologinlogin

    ......

    在每一行后面加一个空格然后加login

    [root@wangshaojun ~]# sed 's#^.*$#& login#g' 1.txt
    root:x:0:0:root:/root:/bin/bash login
    bin:x:1:1:bin:/bin:/sbin/nologin login
    daemon:x:2:2:daemon:/sbin:/sbin/nologin login

    ......

    把每一行所以的数字删掉

    [root@wangshaojun ~]# sed 's#[0-9]##g' 1.txt /////替换成空格也就等于删掉
    root:x:::root:/root:/bin/bash
    bin:x:::bin:/bin:/sbin/nologin
    daemon:x:::daemon:/sbin:/sbin/nologin

    ......

    把每一行的字母删掉

    [root@wangshaojun ~]# sed 's#[a-z]##g' 1.txt
    ::0:0::/://
    ::1:1::/://
    ::2:2::/://

    ......

    把一行的数字字母删掉 

    [root@wangshaojun ~]# sed 's#[^0-9A-Za-z]##g' 1.txt ////反选
    rootx00rootrootbinbash
    binx11binbinsbinnologin
    daemonx22daemonsbinsbinnologin

    ......

    以冒号为分隔符把第一段把最后一段换位置

    [root@wangshaojun ~]# sed -r '^.*$#(^[a-z0-9]:)(.*:)(.*$)#321#g' 1.txt (错误)

    [root@wangshaojun ~]# sed -r 's#(^[a-z0-9]+)(:.*:)(.*$)#321#g' 1.txt/////s是替换的意思(^[a-z0-9]+)以字母和数字开头后面跟1个或任意个+号前面的字符(:.*:)以冒号开头以冒号结束中间是任意个任意字符(.*$)最后一个冒号后面的任意个任意字符到结束 321 意思是把3和1调换位置

    /bin/bash:x:0:0:root:/root:root
    /sbin/nologin:x:1:1:bin:/bin:bin
    /sbin/nologin:x:2:2:daemon:/sbin:daemon
    /sbin/nologin:x:3:4:adm:/var/adm:adm

    .....

    分别搜索包含关键词root和aming的行,一行有两个关键词显示两次

    [root@wangshaojun ~]# sed -rn '/user/p;/root/p' 1.txt
    root: user x:0:0:root:/root:/bin/bash
    root: user x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin

    或者搜索包含关键词root和aming的行,一行有两个关键词显示一次

    [root@wangshaojun ~]# sed -n -r '/user|root/p' 1.txt
    root: user x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin

    /////////////////////////////////////////////////////////////////////////////////////////////

    总结:sed的替换 指定替换的行数/指定被替换的字符/指定新的字符/全局替换加g否则替换第一个出现的被替换字符

  • 相关阅读:
    Socket 之 同步以及异步通信
    Socket 之 c#实现Socket网络编程
    Socket 之 API函数介绍
    Socket 之 原理与编程基础
    C# 之 user32函数库
    WinServer 之 访问同网段服务器 或 同一服务器多虚拟机间的访问
    annex-b格式
    FLV文件格式解析
    PHP5中的stdClass
    web服务器【apache/nginx] 关闭目录的浏览权限
  • 原文地址:https://www.cnblogs.com/wangshaojun/p/4976243.html
Copyright © 2011-2022 走看看