一、概念

正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一组特殊字符,组成一个“规则字符集合”,根据用户指定的文本模式对目标文件进行逐行搜索匹配,显示能被模式匹配到的结果。

给定一个正则表达式和另一个目标字符串,我们可以从给定的字符串中通过匹配模型,过滤字符串中不想要的的字符串,得到目标字符串,减少工作量。

常用的正则表达式一般分为基本正则表达式grep和扩展正则表达式egrep。

二、基本正则表达式grep

基本正则表达式grepGlobal search Regular Expression and Print out of the line

用法:

grep [options] "pattern" file

常用选项

--color=auto        匹配到的字符串显示颜色
-v                  反向匹配,显示不能被匹配到的行
-o                  仅显示行中被模式匹配到的字符串
-i                  忽略大小写(ignore case)
-n                  显示行号
-c                  显示统计到的行号,等同于wc -l
-q                  静默模式,不输出任何信息
-e                  一次匹配多个条件
-w                  匹配整个单词
-A(after)           显示匹配到的行以及下面的一行
-B(before)          显示匹配到的行以及上面的一行
-C(context)         显示匹配到的行以及上下各一行
-E                  支持扩展正则表达式
        grep -E =egrep

元字符 元字符:*,?,不表示字符本身的意义,而是用于额外功能性的描述;

.                   匹配任意单个字符
*                   匹配任意字符任意次
.*                  匹配任意长度的任意字符
\?                  匹配其前面的字符0次或1次
[]                  指定范围内的任意单个字符
[[:alpha:]]         匹配所有的大写字母和小写字母
[[:digit:]]         匹配所有的数字
[[:lower:]]         匹配小写字母
[[:upper:]]         匹配大写字母
[[:alnum:]]         匹配大小写字母和数字
[[:graph:]]         匹配所有非空格字符串
[[:space:]]         匹配空格
[[:punct:]]         匹配标点符号
[[:print:]]         匹配所有可打印的字母
[^]                 指定范围外的任意单个字符
\{m\}               匹配m次
\{m,n\}             匹配最少m次,最多n次
\{m,\}              匹配最少m次
\{0,n\}             匹配最多n次
^                   匹配行首(必须出现在行首)
$                   匹配行尾(必须出现在行尾)
    ^$              锚定空白行
    ^char           锚定行首
    char$           锚定行尾
\<    \b            锚定词首
\>    \b            锚定词尾
\(\)               分组
\1                  匹配前面第一个小括号内的模式相同的内容
    \(ab\)\{1,3\}: ab,aab,abb,abab,ababab
    \(a.b\).*\1    前匹配后引用

三、扩展正则表达式

相当于  grep -E

元字符:

字符匹配:
    .               任意单个字符
    []              指定范围内的任意单个字符
    [^]             指定范围外的任意单个字符
次数匹配:
    *               匹配其前面的字符任意次
    ?              匹配其前面的字符0次或1次
    +               匹配其前面的字符至少1次
    {m}             匹配其前面的字符m次
    {m,n}           匹配其前面的字符最少m次最多n次
    {m,}            匹配其前面的字符最少m次
    {0,n}           匹配其前面的字符最多n次
锚定:
    ^               锚定行首
    $               锚定行尾
    \<    \b        锚定单词首部
    \>    \b        锚定单词尾部
分组:
    ()              分组
    |               同时匹配,同时匹配其前面和其后面的字符

练习:

1.找出/etc/passwd中的两位数或三位数

[root@pxe40 ~]#grep "[[:digit:]]\{2,3\}" /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
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
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

2.显示CentOS7中/etc/grub2.cfg文件中,至少以一个空白字符串开头且后在存在非空白字符的行

[root@localhost ~]#egrep "^[[:space:]]{1,}[^[:space:]]" /etc/grub2.cfg
  load_env
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
   set default="${saved_entry}"
  menuentry_id_option="--id"
  menuentry_id_option=""
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
  set timeout_style=menu
  set timeout=5
  set timeout=5
  source ${prefix}/user.cfg
  if [ -n ${GRUB2_PASSWORD} ]; then
    set superusers="root"
    export superusers
    password_pbkdf2 root ${GRUB2_PASSWORD}
  fi
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod xfs
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  0f3b795b-fc0b-45a0-becd-38fb57482121
    else
      search --no-floppy --fs-uuid --set=root 0f3b795b-fc0b-45a0-becd-38fb57482121
    fi
    linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=844cc1df-258f-4258-8f38-94de51387be9 ro rhgb quiet LANG=en_US.UTF-8
    initrd16 /initramfs-3.10.0-327.el7.x86_64.img
    load_video
    insmod gzio
    insmod part_msdos
    insmod xfs
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  0f3b795b-fc0b-45a0-becd-38fb57482121
    else
      search --no-floppy --fs-uuid --set=root 0f3b795b-fc0b-45a0-becd-38fb57482121
    fi
    linux16 /vmlinuz-0-rescue-e2ddeae13fe64821ae46c7feca0669ae root=UUID=844cc1df-258f-4258-8f38-94de51387be9 ro rhgb quiet
    initrd16 /initramfs-0-rescue-e2ddeae13fe64821ae46c7feca0669ae.img
  source ${config_directory}/custom.cfg
  source $prefix/custom.cfg;

3.显示/etc/passwd文件中包含root内容的行

[root@pxe40 ~]#grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

4.找出/etc/passwd文件中以root开头以bash结尾的行

[root@pxe40 ~]#grep "^root.*bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash

5.打出/etc/passwd文件中不是以/sbin/nologin结尾的行,并显示该用户在文件中的行号

[root@pxe40 ~]#cat -n /etc/passwd | grep "nologin$"
 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
 9    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
11    operator:x:11:0:operator:/root:/sbin/nologin
12    games:x:12:100:games:/usr/games:/sbin/nologin
13    gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
14    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
15    nobody:x:99:99:Nobody:/:/sbin/nologin
16    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
17    saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
18    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

6.找出/etc/passwd文件中shutdown用户所在的行以及上下各三行内容

[root@pxe40 ~]#grep -C 3  "shutdown" /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

7.找出/root/.bashrc文件中不包含注释和空白的行

[root@pxe40 ~]#egrep -v "^#|^$" .bashrc
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi
alias "cdnet"="cd /etc/sysconfig/network-scripts/"
alias "grep"="grep --color=auto"
alias vi=vim

8.找出/etc/passwd文件中用户id和属组id相同的用户

[root@pxe40 ~]#grep "\(\b[[:digit:]]\{1,5\}\b\).*\1" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

9.显示/proc/meminfo文件中以大小写s开头的行

[root@pxe40 ~]#grep -i "^s" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2047996 kB
SwapFree:        2047996 kB
Shmem:               240 kB
Slab:              68740 kB
SReclaimable:      10556 kB
SUnreclaim:        58184 kB

10.取出系统中默认shell为非bash的用户

[root@pxe40 ~]#grep -v "bash$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
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
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

11.显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟最少一个空白字符,而后又有一个非空白字符的行

[root@pxe40 ~]#egrep "^#[[:space:]]+[^[:space:]]" /etc/rc.d/rc.sysinit
# /etc/rc.d/rc.sysinit - run once at boot time
# Taken in part from Miquel van Smoorenburg's bcheckrc.
# Check SELinux status
# Print a text banner.
# Only read this once.
# Initialize hardware
# Set default affinity
# Load other user-defined modules
# Load modules (for backward compatibility with VARs)
# Configure kernel parameters
# Set the hostname.
# Sync waiting for storage.
# Device mapper & related initialization
# Start any MD RAID arrays that haven't been started yet
# Remount the root filesystem read-write.
# Clean up SELinux labels
# If relabeling, relabel mount points.
# Mount all other filesystems (except for NFS and /proc, which is already
# mounted). Contrary to standard usage,
# filesystems are NOT unmounted in single user mode.
# The 'no' applies to all listed filesystem types. See mount(8).
# Check to see if a full relabel is needed
# Update quotas if necessary
# Initialize pseudo-random number generator
# Configure machine if necessary.
# Clean out /.
# Do we need (w|u)tmpx files? We don't set them up, but the sysadmin might...
# Clean up /var.
# Clean up utmp/wtmp
# Clean up various /tmp bits
# Make ICE directory
# Start up swapping.
# Set up binfmt_misc
# Boot time profiles. Yes, this should be somewhere else.
# Now that we have all of our basic modules loaded and the kernel going,
# let's dump the syslog ring somewhere so we can find it later
# create the crash indicator flag to warn on crashes, offer fsck with timeout
# Let rhgb know that we're leaving rc.sysinit

12.添加用户bash和testbash,而后找出系统上其用户名和默认shell相同的用户

Linux的正则表达式grep,egrep的更多相关文章

  1. linux:正则表达式grep命令

    基本语法一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串. 一.选择:| |   竖直分隔符表示选择,例如"boy|girl"可 ...

  2. Linux基础正则表达式:grep,sed

    先说明语系对正则表达式的影响    LANG=C:0,1,2,3,4...A,B,C,D...Z a b c d ... z    LANG=zh_CN:0,1,2,3,4...a A b B c C ...

  3. Linux之正则表达式grep

    真好!

  4. grep egrep fgrep命令

    一.grep.egrep.fgrep命令 本文中主要介绍了linux系统下grep egrep fgrep命令和正则表达式的基本参数和使用格式.方法.(注释:文中fg代表例子,) 1.1.基本定义: ...

  5. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

  6. Linux三剑客之grep 与 egrep

    grep: Linux上文本处理三剑客 grep:文本过滤(模式:pattern)工具; *(grep, egrep, fgrep) sed:stream editor,文本编辑工具: awk:Lin ...

  7. grep与正则表达式,grep、egrep和fgrep

    grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串. ...

  8. [转] linux 查找文本过滤grep正则表达式命令详解用法

    grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用 ...

  9. Linux正则表达式grep

    正则表达式是一种符号表示法,用于识别文本模式.Linux处理正则表达式的主要程序是grep.grep搜索与正则表达式匹配的行,并将结果输送至标准输出. 1. grep匹配模式 grep按下述方式接受选 ...

随机推荐

  1. 吃透css3之3d属性--perspective和transform

    本文为原创,转载请注明出处: cnzt 写在前面:最近写了个3d轮播效果图,在此将思路和过程中遇到的问题都记录下来. 首先,我们下来了解一下perspective和transform都是做什么的. t ...

  2. cuda编程学习2——add

    cudaMalloc()分配的指针有使用限制,设备指针的使用限制总结如下: 1.可以将其传递给在设备上执行的函数 2.可以在设备代码中使用其进行内存的读写操作 3.可以将其传递给在主机上执行的函数 4 ...

  3. 常见【十种】WEB攻击及防御技术总结

    最近参加了一个WEB安全培训,感觉WEB攻击跟防御都是挺有意思的.以下总结比较简短,仅供观赏哈. 一.XSS攻击 [介绍] xss攻击是跨站脚本攻击,例如在表单中提交含有可执行的javascript的 ...

  4. 关于Union和Union All的区别以及用法

    有些时候我们在查询的时候会碰到这么一个问题,就是一条SQL不能查出来你想要的结果;首先,我们必须明确一条查询SQL执行之后数据库会给我们返回什么,他会返回符合条件的一个结果集,而当你一条查询SQL不能 ...

  5. jQuery购物车

    效果图 HTML代码:(非表格方式) <div class="nav2"> <input type="checkbox" class=&quo ...

  6. 20155206 2016-2017-2 《Java程序设计》第5周学习总结

    20155206 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 Java中所有错误都会被打包为对象,运用try.catch,可以在错误发生时显示友好的错误信 ...

  7. JavaScript高级程序设计---学习笔记(四)

    1.全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以. var age = 29; window.color = "red"; delete age ...

  8. JavaScript中的6种运算符总结

    JavaScript 运算符主要包括: 算术运算符 赋值运算符 比较运算符 三元运算符 逻辑运算符 字符串连接运算符 运算符 说明 例子 运算结果 + 加 y = 2+1 y = 3 - 减 y = ...

  9. 1129: 零起点学算法36——3n+1问题

    1129: 零起点学算法36--3n+1问题 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 4541 ...

  10. JVM初探之类文件结构

    java 的 .class 文件字节码如图:Class 文件是一组以8字节为基础单位的二进制流,各个数据项目有着严格的结构.下面我们介绍下class文件的结构. 魔数 class文件的头4个字节是魔数 ...