博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单介绍shell编程四剑客之grep
阅读量:4538 次
发布时间:2019-06-08

本文共 14969 字,大约阅读时间需要 49 分钟。

 

概要:分别的作用

grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤。

sed:stream editor 文本编辑工具;(流编辑器),擅长取行、替换。

awk:linux上的实现gawk,文件报告生成器;(独立的编程语言),过滤内容,擅长取列。

find:linux上实时查找工具,通过便利指定路径下得文件系统完成文件查找。

 

 

一、grep

    文本过滤(模式:pattern)工具,grep,egrep,fgrep

    文本搜索工具,根据用户指定的模式对目标文本逐行进行匹配检查,打印匹配到的行;

 

  1、模式

    由正则表达式字符及文本字所编写的过滤条件

    grep [OPTIONS] PATTERN[FILE]

 

  2、选项

    --color=auto:对匹配到的我那本着色显示;

    -v:显示不能够陪pattern匹配到的行;

    -i:忽略字符大小写;

    -o:仅显示匹配到的字符串;

    -q:静默模式,不输出任何信息;

    -A#:after,匹配到的后#行,就是显示匹配还显示该行之前得num行

    -B#:before,前#行,还显示该行之后得num行

    -C#context,前后各#行 ,还显示该行前后各num行

    -E:使用ERE;扩展正则表达式,egrep=grep -E

    -F:相当于fgrep

 

  3、正则表达式

    基于正则表达式元字符:

      1)、字符匹配:

        .: 匹配任意单个字符;

        []: 匹配指定范围内的任意单个字符
        [^]:匹配指定范围外的任意单个字符
        专用字符集合

          [:digit:]:任意数字,相当于0-9

          [:lower:]:所有的小写字符

          [:upper:]:大写字符

          [:alpha:]:大小写

          [:alnum:]:数字和字符

          [:punct:]:标点符号

          [:space:]:空格

          [:graph:] 可打印的非空白字符

        

        grep 's..n' /etc/passwd

        grep '...t' /etc/passwd
        grep'[[:alpha:]][[:alpha:]][[:alpha:]]t' /etc/passwd这样写太难受了,可以用匹配次数

      2)、匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;
        *:匹配前面的字符任意次;仅表示次数

          nano grep.txt

            xxxxxxy
          grep "x*y" grep.txt,这就是贪婪模式,如果只有x是不可以的,x可以没有也可以出现多行

        贪婪模式

          .*:任意长度的任意字符;
            

          \?:匹配其前面的字符0或1次;即前面的可有可无;

            

          \+:匹配其前面的字符至少1次;

          \{m\}:匹配前面的字符m次;
            

          \{m,n\}:匹配前面的字符至少m次,至多n次;

          \{0,n\}:匹配前面的字符至多n次;

          \{m,\}:匹配前面的字符至少m次;

 

    3)、位置锚定:

      ^:行首锚定;用于模式的最左侧;
      
      $:行尾锚定;用于模式的最右侧;
     
      ^PATTERN$: 用于模式匹配整行;

      ^$: 空行;
      ^[[:space:]]*$这个空白是可以没有的应为有*号

      \< 或 \b:词首锚定;用于单词模式的左侧;单词的最左侧

      \> 或 \b:词尾锚定;用于单词模式的右侧;

      \<PATTERN\>:匹配整个单词;

     分组:

      \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理

        \(xy\)*ab
        nano grep.txt
        xyxyxyxy
        grep "\(xy\)+" 如果没有小括号,则代表x后面至少一个y

      Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
        \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
        \(ab\+\(xy\)*\):
        \1: ab\+\(xy\)*这个\是和前面的有括号匹配
        \2: xy
        当我们想后续内容与前面模式匹配到的语言,则需要使用引用,即后向引用
      后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)
        grep '[[:alpha:]]'\{1,3\}t\>' /etc/passwd
        grep '[[:alpha:]]'\{1,3\}t\>'.*'[[:alpha:]]'\{1,3\}t /etc/passwd 观察,有前后不一致的
        grep '[[:alpha:]]'\{1,3\}t\>'.*\1' /etc/passwd 现在观察匹配的相同的一定是一样的

     扩展正则表达式:

      基于正则表达式而言扩展正则表达式在某些参数上可以不使用转义符(\),在使用方式上没有区别

        1)、字符匹配

          .

          []

          [^]

        2)、次数匹配

          * 

           ?:0或1次

          +:1次或多次

          {m}:匹配m次

          {m,n}:至少m至多n次

        3)、锚定

          ^

          $

          \<,\b

          \>,\b

          分组

          ()

          后向引用:\1,\2...

          或者 a|b

 

        

  4、实例

    实例1、显示/proc/meminfo文件中以大小s开头得行

 

1 [root@web2 keepalived]# grep -i "^[Ss]" /proc/meminfo    2 SwapCached:            0 kB 3 SwapTotal:       3933180 kB 4 SwapFree:        3933180 kB 5 Shmem:             92032 kB 6 Slab:             131744 kB 7 SReclaimable:      86092 kB 8 SUnreclaim: 45652 kB 9 [root@web2 keepalived]# grep -i "^s" /proc/meminfo 10 SwapCached: 0 kB 11 SwapTotal: 3933180 kB 12 SwapFree: 3933180 kB 13 Shmem: 92032 kB 14 Slab: 131752 kB 15 SReclaimable: 86092 kB 16 SUnreclaim: 45660 kB 17 [root@web2 keepalived]# grep "^[Ss]" /proc/meminfo 18 SwapCached: 0 kB 19 SwapTotal: 3933180 kB 20 SwapFree: 3933180 kB 21 Shmem: 92032 kB 22 Slab: 131752 kB 23 SReclaimable: 86092 kB 24 SUnreclaim: 45660 kB 25 [root@web2 keepalived]# grep "^s\|^S" /proc/meminfo 26 SwapCached: 0 kB 27 SwapTotal: 3933180 kB 28 SwapFree: 3933180 kB 29 Shmem: 92032 kB 30 Slab: 131752 kB 31 SReclaimable: 86092 kB 32 SUnreclaim: 45660 kB 33 [root@web2 keepalived]#

    实例2、显示/etc/passwd文件中不以/bin/bash结尾行

 

1 [root@web2 keepalived]# grep -v "/bin/bash"$ /etc/passwd 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 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/root:/sbin/nologin11 games:x:12:100:games:/usr/games:/sbin/nologin12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin13 nobody:x:99:99:Nobody:/:/sbin/nologin14 systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin15 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin16 dbus:x:81:81:System message bus:/:/sbin/nologin17 polkitd:x:998:997:User for polkitd:/:/sbin/nologin18 abrt:x:173:173::/etc/abrt:/sbin/nologin19 unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin20 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin21 libstoragemgmt:x:996:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin22 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin23 colord:x:995:993:User for colord:/var/lib/colord:/sbin/nologin24 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin25 saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin26 geoclue:x:993:991:User for geoclue:/var/lib/geoclue:/sbin/nologin27 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin28 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin29 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin30 radvd:x:75:75:radvd user:/:/sbin/nologin31 qemu:x:107:107:qemu user:/:/sbin/nologin32 ntp:x:38:38::/etc/ntp:/sbin/nologin33 chrony:x:992:989::/var/lib/chrony:/sbin/nologin34 setroubleshoot:x:991:988::/var/lib/setroubleshoot:/sbin/nologin35 sssd:x:990:987:User for sssd:/:/sbin/nologin36 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin37 gdm:x:42:42::/var/lib/gdm:/sbin/nologin38 gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin39 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin40 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin41 postfix:x:89:89::/var/spool/postfix:/sbin/nologin42 tcpdump:x:72:72::/:/sbin/nologin43 nginx:x:988:983:Nginx web server:/var/lib/nginx:/sbin/nologin44 mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin45 [root@web2 keepalived]#

    实例3、显示/etc/passwd文件中ID号最大得用户的用户名

 

1 [root@web1 keepalived]# sort -t: -k3 -n /etc/passwd |tail -1 |cut -d: -f12 nfsnobody3 [root@web1 keepalived]#

 

    实例4、如果用户root存在,显示其默认的shell程序

1 [root@web1 keepalived]# id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f72 /bin/bash3 [root@web1 keepalived]#

 

    实例5、找出/etc/passwd中的两位或三位数

1 [root@web1 keepalived]# grep "\<[0-9]\{2,3\}\>" /etc/passwd 2 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 3 operator:x:11:0:operator:/root:/sbin/nologin 4 games:x:12:100:games:/usr/games:/sbin/nologin 5 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 6 nobody:x:99:99:Nobody:/:/sbin/nologin 7 systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin 8 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 9 dbus:x:81:81:System message bus:/:/sbin/nologin10 polkitd:x:998:997:User for polkitd:/:/sbin/nologin11 abrt:x:173:173::/etc/abrt:/sbin/nologin12 unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin13 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin14 libstoragemgmt:x:996:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin15 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin16 colord:x:995:993:User for colord:/var/lib/colord:/sbin/nologin17 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin18 saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin19 geoclue:x:993:991:User for geoclue:/var/lib/geoclue:/sbin/nologin20 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin21 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin22 radvd:x:75:75:radvd user:/:/sbin/nologin23 qemu:x:107:107:qemu user:/:/sbin/nologin24 ntp:x:38:38::/etc/ntp:/sbin/nologin25 chrony:x:992:989::/var/lib/chrony:/sbin/nologin26 setroubleshoot:x:991:988::/var/lib/setroubleshoot:/sbin/nologin27 sssd:x:990:987:User for sssd:/:/sbin/nologin28 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin29 gdm:x:42:42::/var/lib/gdm:/sbin/nologin30 gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin31 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin32 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin33 postfix:x:89:89::/var/spool/postfix:/sbin/nologin34 tcpdump:x:72:72::/:/sbin/nologin35 zhangxingeng:x:1000:1000:centos-7-64:/home/zhangxingeng:/bin/bash36 nginx:x:988:983:Nginx web server:/var/lib/nginx:/sbin/nologin37 lightdm:x:987:982::/var/lib/lightdm:/sbin/nologin38 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin39 redis:x:986:981:Redis Database Server:/var/lib/redis:/sbin/nologin40 mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin41 [root@web1 keepalived]#

 

    实例6、显示/etc/rc.d/rc.sysinit文件中,至少一个空白字符开头的且后面存非空白字符的行

1 [root@web1 keepalived]# grep "^[[:space:]]\+[[:graph:]]" /etc/grub2.cfg 2   load_env 3    set default="${next_entry}" 4    set next_entry= 5    save_env next_entry 6    set boot_once=true 7    set default="${saved_entry}" 8   menuentry_id_option="--id" 9   menuentry_id_option=""10   set saved_entry="${prev_saved_entry}"11   save_env saved_entry12   set prev_saved_entry=13   save_env prev_saved_entry14   set boot_once=true15   if [ -z "${boot_once}" ]; then16     saved_entry="${chosen}"17     save_env saved_entry18   fi19   if [ x$feature_all_video_module = xy ]; then20     insmod all_video21   else22     insmod efi_gop23     insmod efi_uga24     insmod ieee1275_fb25     insmod vbe26     insmod vga27     insmod video_bochs28     insmod video_cirrus29   fi30   set timeout_style=menu31   set timeout=532   set timeout=533   source ${prefix}/user.cfg34   if [ -n "${GRUB2_PASSWORD}" ]; then35     set superusers="root"36     export superusers37     password_pbkdf2 root ${GRUB2_PASSWORD}38   fi39         load_video40         set gfxpayload=keep41         insmod gzio42         insmod part_msdos43         insmod xfs44         set root='hd0,msdos1'45         if [ x$feature_platform_search_hint = xy ]; then46           search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  a9392b0d-ae01-41ce-b4a0-efb843235bfe47         else48           search --no-floppy --fs-uuid --set=root a9392b0d-ae01-41ce-b4a0-efb843235bfe49         fi50         linux16 /vmlinuz-3.10.0-514.el7.x86_64 root=UUID=11b66499-c82b-476f-8576-fc3690a4e26d ro crashkernel=auto rhgb quiet LANG=en_US.UTF-851         initrd16 /initramfs-3.10.0-514.el7.x86_64.img52         load_video53         insmod gzio54         insmod part_msdos55         insmod xfs56         set root='hd0,msdos1'57         if [ x$feature_platform_search_hint = xy ]; then58           search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  a9392b0d-ae01-41ce-b4a0-efb843235bfe59         else60           search --no-floppy --fs-uuid --set=root a9392b0d-ae01-41ce-b4a0-efb843235bfe61         fi62         linux16 /vmlinuz-0-rescue-b7671beb75f14e95b5a58975dae3a897 root=UUID=11b66499-c82b-476f-8576-fc3690a4e26d ro crashkernel=auto rhgb quiet63         initrd16 /initramfs-0-rescue-b7671beb75f14e95b5a58975dae3a897.img64   source ${config_directory}/custom.cfg65   source $prefix/custom.cfg;66 [root@web1 keepalived]#

 

 

    实例7、找出“netstat -tan”命令的结果以LISTEN后跟0、1或多个空白字符结尾

1 [root@web1 keepalived]# netstat -tan | grep "LISTEN[[:space:]]*$" 2 tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      3 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4 tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      5 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6 tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      7 tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      8 tcp6       0      0 :::111                  :::*                    LISTEN      9 tcp6       0      0 :::80                   :::*                    LISTEN     10 tcp6       0      0 :::22                   :::*                    LISTEN     11 tcp6       0      0 ::1:631                 :::*                    LISTEN     12 tcp6       0      0 ::1:25                  :::*                    LISTEN     13 [root@web1 keepalived]#

 

 

    实例8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;

1 [root@web1 keepalived]# cat /etc/passwd | grep "\(^[[:alnum:]]\+\>\).*\<\1$"  2 [root@web1 keepalived]# useradd bash 3 [root@web1 keepalived]# useradd testbash 4 [root@web1 keepalived]# useradd basher 5 [root@web1 keepalived]# useradd -s /sbin/nologin nologin 6 [root@web1 keepalived]# grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd 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/halt10 bash:x:1001:1001::/home/bash:/bin/bash11 nologin:x:1004:1004::/home/nologin:/sbin/nologin12 [root@web1 keepalived]#

    #谋定所有得数字和字符,至少出现一个所以用+,谋定整个单词词尾,然后()括号做分组,.*中间跟上任意内容,\1$结尾跟括号内一致

 

  egrep实例

    实例9、显示当前系统root、centos或user1用户的默认shell和UID;

1 [root@web1 keepalived]# grep -E '^(root|centos|user1)\>' /etc/passwd | cut -d: -f 1,3,72 root:0:/bin/bash3 [root@web1 keepalived]#

 

    实例10、找出/etc/rc.d/init.d/functions文件中某单词后跟一个小括号的行

1 [root@web1 keepalived]# grep -E -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions 2 checkpid() 3 __kill_pids_term_kill_checkpids() 4 __kill_pids_term_kill() 5 __pids_var_run() 6 __pids_pidof() 7 daemon() 8 killproc() 9 pidfileofproc()10 pidofproc()11 status()12 echo_success()13 echo_failure()14 echo_passed()15 echo_warning()16 update_boot_stage()17 success()18 failure()19 passed()20 warning()21 action()22 strstr()23 is_ignored_file()24 is_true()25 is_false()26 apply_sysctl()27 [root@web1 keepalived]#

      #_这个是连字符,+至少出现一次\(\)显示()本身

    实例11、使用echo输出一绝对路径,使用egrep取出其基名

1 [root@web1 keepalived]#  echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f12 sdc3 [root@web1 keepalived]#

 

    实例12、找出ifconfig命令结果中1-255之间的数值,这里分别表是0-9、10-99、100-199、200-249、250-255

1 echo {1..1000} | egrep -o "\b[0-9]\b" | tr "\n" " " ;echo2 echo {1..1000} | egrep -o "\b[0-9]{2}\b" | tr "\n" " " ;echo3 echo {1..1000} | egrep -o "\b1[0-9]{2}\b" | tr "\n" " " ;echo4 echo {1..1000} | egrep -o "\b2[0-4][0-9]\b" | tr "\n" " " ;echo5 echo {1..1000} | egrep -o "\b25[0-5]\b" | tr "\n" " " ;echo 

 

    实例13、找出ifconfig命令结果中的IP地址

1 [root@web1 keepalived]# ifconfig|egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"2 255.255.255.03 127.0.0.14 255.0.0.05 192.168.122.16 255.255.255.07 192.168.122.2558 [root@web1 keepalived]#

 

转载请注明出处: 

转载于:https://www.cnblogs.com/zhangxingeng/p/10789761.html

你可能感兴趣的文章
hdu3714 三分找最值
查看>>
JSON-RPC(jsonrpc4j)使用demo
查看>>
Deploy Sharepoint Designer 2010 Workflow as WSP
查看>>
启动页面
查看>>
innodb_flush_log_at_trx_commit与sync_binlog理解
查看>>
Python脚本重定向其输出时的编码问题
查看>>
二叉搜索树
查看>>
序列模型(4)----门控循环单元(GRU)
查看>>
-Ubuntu系统下安装srilm工具箱
查看>>
关于python如何输出log
查看>>
angular2模板绑定样式
查看>>
用Go自己实现配置文件热加载功能
查看>>
如何解决U盘装系统后磁盘总容量变小?
查看>>
C#基本数据类型与C++区别
查看>>
CXF添加拦截器和自定义拦截器
查看>>
SmartBear推出新产品LoadComplete
查看>>
d2js 中实现 memcached 共享 session 的过程
查看>>
HightCharts基本图形:折线图、柱状图、饼图
查看>>
Java创建对象过程
查看>>
1005 继续(3n+1)猜想 (25 分)
查看>>