• sed-grep命令


    sed -i '$a IPADDR=192.168.1.199' /etc/sysconfig/ifcfg-eth0work-scripts/ifcfg-eth0            #追加ip地址。    
    sed -i '$aNETMASK=255.255.255.0' /etc/sysconfig/ifcfg-eth0work-scripts/ifcfg-eth0         #追加子网掩码
    sed -i '$aGATEWAY=192.168.1.1' /etc/sysconfig/ifcfg-eth0work-scripts/ifcfg-eth0             #追加网关
    sed -i '$aDNS1=114.114.114.114' /etc/sysconfig/ifcfg-eth0work-scripts/ifcfg-eth0             #追加DNS.
    sed -i '/BOOTPROTO=/s/dhcp/static/g' /etc/sysconfig/ifcfg-eth0work-scripts/ifcfg-eth0        #修改ip获取方式。
    sed -i '/ONBOOT=/s/no/yes/g' /etc/sysconfig/ifcfg-eth0work-scripts/ifcfg-eth0                #开机自启网卡。
    [root@node2 ~]# grep "root" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@node2 ~]# grep -i "Root" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@node2 ~]# grep -in "Root" /etc/passwd
    1:root:x:0:0:root:/root:/bin/bash
    10:operator:x:11:0:operator:/root:/sbin/nologin
    [root@node2 ~]# grep -ino "Root" /etc/passwd
    1:root
    1:root
    1:root
    10:root
    [root@node2 ~]# grep -vc "root" /etc/passwd
    22
    [root@node2 ~]# cat /etc/passwd |wc -l
    24
    [root@node2 ~]# grep -A 2 "core id" /proc/cpuinfo 
    core id         : 0
    cpu cores       : 1
    apicid          : 0
    [root@node2 scprits]# cat > demo.c << eof
    > #inclued <stdio.sh>
    > int main ()
    > {
    > int hello=3
    > int world=4;
    > int helloworld=hello+world
    > printf ("&d
    ", helloworld);
    > return;
    > }
    > eof
    [root@node2 scprits]# grep "hello" demo.c 
    int hello=3
    int helloworld=hello+world
    printf ("&d
    ", helloworld);
    [root@node2 scprits]# grep "hello[[:upper:]]" demo.c 
    int helloWorld=hello+world
    printf ("&d
    ", helloWorld);
    [root@node2 scprits]# grep "hello[^[:upper:]][[:digit:]]" demo.c 
    int hello=3
    [root@node2 scprits]# grep "hell[a-z]" demo.c 
    int hello=3
    int helloWorld=hello+world
    printf ("&d
    ", helloWorld);
    [root@node2 scprits]# grep "hell[a-z][[:punct:]]" demo.c 
    int hello=3
    int helloWorld=hello+world

    匹配次数:

          {m,n} :匹配其前面出现的字符至少m次,至多n次。
          ? :匹配其前面出现的内容0次或1次,等价于{0,1}。
          * :匹配其前面出现的内容任意次,等价于{0,},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。

    [root@node2 scprits]# grep "/.*sh" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    liujunjun:x:1000:1000::/home/liujunjun:/bin/bash
    [root@node2 scprits]# grep "/.{0,2}sh" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    liujunjun:x:1000:1000::/home/liujunjun:/bin/bash
    [root@node2 scprits]# grep  -w ".{0,2}sh" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    liujunjun:x:1000:1000::/home/liujunjun:/bin/bash

    位置锚定:

          ^ :锚定行首

          $ :锚定行尾。技巧:"^$"用于匹配空白行。

          或<:锚定单词的词首。如"like"不会匹配alike,但是会匹配liker

          或>:锚定单词的词尾。如"like"不会匹配alike和liker,只会匹配like

          B :与作用相反。

    [root@node2 scprits]# grep "h" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    nginx:x:997:995::/home/nginx:/sbin/nologin
    liujunjun:x:1000:1000::/home/liujunjun:/bin/bash
    [root@node2 scprits]# grep "h$" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    liujunjun:x:1000:1000::/home/liujunjun:/bin/bash
    [root@node2 scprits]# grep "<sh" /etc/passwd
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    [root@node2 scprits]# grep "Bsh" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    liujunjun:x:1000:1000::/home/liujunjun:/bin/bash

    分组及引用:

          (string) :将string作为一个整体方便后面引用

            1 :引用第1个左括号及其对应的右括号所匹配的内容。

            2 :引用第2个左括号及其对应的右括号所匹配的内容。

             :引用第n个左括号及其对应的右括号所匹配的内容。

    [root@node2 scprits]# grep "^([[:alpha:]]).*1$" /etc/passwd
    nobody:x:99:99:Nobody:/:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    nginx:x:997:995::/home/nginx:/sbin/nologin

    3、扩展的(Extend)正则表达式(注意要使用扩展的正则表达式要加-E选项,或者直接使用egrep):

        匹配字符:这部分和基本正则表达式一样

        匹配次数

          * :和基本正则表达式一样

          ? :基本正则表达式是?,二这里没有。

          {m,n} :相比基本正则表达式也是没有了。

          + :匹配其前面的字符至少一次,相当于{1,}。

        位置锚定:和基本正则表达式一样。

        分组及引用

          (string) :相比基本正则表达式也是没有了。

            1 :引用部分和基本正则表达式一样。

             :引用部分和基本正则表达式一样。

        或者

          a|b :匹配a或b,注意a是指 | 的左边的整体,b也同理。比如 C|cat 表示的是 C或cat,而不是Cat或cat,如果要表示Cat或cat,则应该写为 (C|c)at 。记住(string)除了用于引用还用于分组。   

    注1:默认情况下,正则表达式的匹配工作在贪婪模式下,也就是说它会尽可能长地去匹配,比如某一行有字符串 abacb,如果搜索内容为 "a.*b" 那么会直接匹配 abacb这个串,而不会只匹配ab或acb。

    注2:所有的正则字符,如 [ 、* 、( 等,若要搜索 * ,而不是想把 * 解释为重复先前字符任意次,可以使用 * 来转义。

    下面用一个练习来结束本次grep的学习:

    在网络配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33 中检索出所有的 IP

    1、检索出 0-255的范围

    [root@node2 scprits]# egrep "[0-9]|[1-9]|[0-9]|1[0-9]|[0-9]|2[0-4]|[0-9]|25[0-5]|" /etc/sysconfig/network-scripts/ifcfg-ens33 
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=eb0d19d9-a7a0-458e-997d-19b01b9e4fe1
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.1.223
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=114.114.114.114
    DNS2=8.8.8.8
    [root@node2 scprits]# egrep "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).
    > ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).
    > ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).
    > ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" 
    > /etc/sysconfig/network-scripts/ifcfg-ens33 
    IPADDR=192.168.1.223
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=114.114.114.114
    DNS2=8.8.8.8
    [root@node2 scprits]# egrep "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" /etc/sysconfig/network-scripts/ifcfg-ens33 
    IPADDR=192.168.1.223
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=114.114.114.114
    DNS2=8.8.8.8
  • 相关阅读:
    把一件简单的事情做好你就不简单了
    一个经验尚浅的码农五年软件开发的一点自我总结,对工作五年的反思~
    我就是一名房地产经纪人!不是中介,谁能明白我们呢?
    我与父辈的酒局
    郎意难坚,侬情自热(文/王路)
    红灯须硬闯,马路要横穿(文/王路)
    孩子,你慢慢来
    职场六年后的一点点感言
    有幸见到一朵花的绽放
    当你遇到她
  • 原文地址:https://www.cnblogs.com/liujunjun/p/11976319.html
Copyright © 2020-2023  润新知