文本处理工具grep

正则表达式:Regular Expression REGEXP

        由一类特殊字符及文本字符所编写的模式,表示控制或通配的功能

两类:

    基本正则表达式BRE:

    扩展正则表达式ERE:

*** grep    GLoble search Regular exression and Print out the line

     文本过滤(一定模式pattern)2

     -v    反向匹配 显示未匹配到的行

     -e    实现多个选项间的逻辑or关系

     -o    仅显示匹配到的字符本身 而不是整行

     -n  显示匹配的行号

     -c    统计匹配的行数

     -w    匹配单词

     -E    支持扩展正则表达式  egrep

     -i    忽略字符大小写

     -q –quiet  静默模式,不输出任何信息   可用$?查看命令执行情况

     -A# :after    显示匹配行及其前#行

     B# :before   匹配行及其后#行

     C# :context  匹配行及其前后#行

1.基本正则表达式元字符:

     .    任意 单个字符

     *    前面字符 任意次 可以不出现 0 – ∞

     .*   任意长度 任意字符

     \?   其前面字符 0次或一次   可有可无

     \+   其前面字符 1次或多次

     \{m,n\}    其前面字符m至n次

      \{m\}   指定出现m次   \{,n\}  至多n次

    

     []   指定范围内任意单个字符

     [^]  指定范围外的任意单个字符

     数字:[:digit:],小写字母[:lower:],大写字母[:upper:],字母[:alpha:],

     字母数字[:alnum:],标点[:punct:],空格[:space:]

      

2.位置锚定:

     ^    行首锚定,整个模式最左侧

     $   行尾锚定,整个模式最右侧

     ^pattern$    用patt匹配整行

     ^$   空白行  不可包含空格

     ^[[:space:]]*$ 空白行或包含任意空格的行

    

     \<或\b     词首锚定

     \>或\b     词尾锚定

     \<pattern\>匹配完整单词

3.分组及引用:

     \(\)     括号内的字符作为一组   \(xy\)\+  一个或多个xy 括号可嵌套不可交叉

     可用\1   \2   \3  …引用对应分组

      

*** 扩展正则表达式:          部分字符区别grep 不用加"\"

    egrep => grep -E

1.扩展正则表达式的元字符:

     .

     []

     [^]

    

     2.次数匹配:        不用加转义字符  "\"

     *

     ?

     +

     {m}

     {m,n}

3.位置锚定:

     ^

     $

     \<,\b

     \>,\b

    

4.分组及引用:

     ()

     后向引用:\1  \2  \3  …

5.或:

     a|b a或者b ;    z|Zjj   z或Zjj ;     (z|Z)jj  zjj或Zjj

    

    

     例   匹配1到255

     egrep -o '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>'

    

     例   passwd 用户名与shell相同的行

     egrep  "^([^:]+\>).*\1$" /etc/passwd

      

     例   简单 过滤出ip地址 不严谨

     egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"

    

===练习:grep

1.显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)

#grep -i "^s" /proc/meminfo 

#grep  "^[sS]" /proc/meminfo

2.显示/etc/passwd文件中不以/bin/bash结尾的行

#grep -v "/bin/bash$" /etc/passwd

3.显示用户rpc默认的shell程序

#grep "^rpc\>" /etc/passwd|cut -d: -f7

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

#grep  -o "[[:digit:]]\{2,3\}" /etc/passwd

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

#grep "^[[:space:]]\+[^[:space:]].*"  /etc/grub2.cfg 

6.找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行

#netstat -tan|grep "\<LISTEN[[:space:]]*$"

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

#egrep  "^([^:]+\>).*\1$" /etc/passwd

===练习:egrep

1.显示当前系统root、mage或wang用户的UID和默认shell

#egrep "^(root|mage|wang)" /etc/passwd|cut -d: -f3,7

2.找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

#grep "^[[:alnum:]_]*\>()" /etc/rc.d/init.d/functions

3.使用egrep取出/etc/rc.d/init.d/functions中其基名

#echo "/etc/rc.d/init.d/functions"|grep -o "[^/]*$"

4.使用egrep取出上面路径的目录名

#echo "/etc/rc.d/init.d/functions"|egrep -o "^.*/"

5.统计以root身份登录的每个远程主机IP地址的登录次数

#who|grep "root"|grep -o "(.*)"|uniq -c

不支持正则表达式元字符:

fgrep:    fast grep  

用不到元字符时 fgrep更快

===常用工具:

#cat [OPTION]… [FILE]…查看文件内容    tac:从行尾开始显示   rev:每行字符倒叙显示

     -A:显示所有控制符

     -n: 对每一行进行编号

     -b:非空行编号

     -s:压缩连续的空行成一行

     -E: 显示行结束符$

    

#more [OPTIONS…] FILE…   分页查看文件

    -d: 显示翻页及退出提示

#less  分页查看文件  可回看

#head [OPTION]… [FILE]…  显示文件前几行  默认10行

     -c #: 指定获取前#字节

     -n #: 指定获取前#行

     -#:指定行数

#tail [OPTION]… [FILE]…  显示文件最后几行 默认10行

     -#:

     -f: 跟踪显示文件新追加的内容,常用日志监控

     -c #: 指定获取后#字节

     -n #: 指定获取后#行

         tail -n0 -f FILE $

paste [OPTION]… [FILE]…  合并两个文件同行号的列到一行

     -d 分隔符:指定分隔符,默认用TAB

     -s : 所有行合成一行显示

     paste f1 f2

     paste -s f1 f2

#wc  word count 单词统计  常和管道|一起使用

     -l    统计行数

     -w    单词数

     -c    字节数

     -m  字符数

cut 从文件中的某些行剪切片段

     -d    以指定的 字符作为 分隔符,  可以不加空格直接加字符  -d# 井号为分隔符

     -f    显示出指定字段    -f3    #:单个字段  #-#:连续多个字段  #,#离散的多个字段

     -c  按字符切割

     –output-delimiter=STRING指定输出分隔符  默认":"

#sort 排序

     -n    以数值 大小进行排序

     -tCHAR     指定分隔符

     -k#   设置比较字段          -t: -k3   冒号为分隔符 第3个字段

     -r    逆序 排序

     -f    忽略字符大小写

     -u    重复的行保留一份      连续相同为重复

#uniq 报告或移除重复的行      配合sort 统计重复出现次数

     -c    统计 每行重复次数

     -u    只显示 无重复的行

     -d    仅显示 有重复的行

#diff 逐行比较两个文件的不同       可制作补丁文件patch

     diff   file.old  file.new    

     -u 输出“统一的(unified)”diff格式文件,适用于补丁文件

    

     diff /oldpath /newpath>/patchfile  制作补丁  把diff命令结果重定向

    

     $diff -u foo.conf-broken foo.conf-works>foo.patch

     $patch -b foo.conf-broken foo.patch

    

     patch   打补丁

     -b选项来自动备份改变了的文件

     patch[OPTIONS] -i (指定补丁文件) /patchfile   /oldpath

     patch /oldpath</patchfile

===练习:cut sort tr head tail uniq

1、找出ifconfig命令结果中本机的所有IPv4地址

#ifconfig|head -2|tail -1|cut -d: -f2|cut -d" " -f1

2、查出分区空间使用率的最大百分比值

#df|tr -s " " ":" |cut -d: -f5|sort -nr|head -1

3.查出用户UID最大值的用户名、UID及shell类型

#sort -nrt: -k3 /etc/passwd|head -1|cut -d: -f1,3,7

4.查出/tmp的权限,以数字方式显示

#stat /tmp|head -4|tail -1|cut -d "(" -f2|cut -d "/" -f1

5.统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

#netstat -nt|tr -s " " ":"|cut -d: -f6|uniq -c|sort -nr

原创文章,作者:Jasper,如若转载,请注明出处:http://www.178linux.com/29031

赞 (1)
JasperJasper
上一篇 2016-08-04 21:40
下一篇 2016-08-04 21:40

相关推荐

  • linux权限详解

    写在前面: 本博客详解命令chmod,  chowm,  chgrp,  umask,  install,  mktemp  权限管理: 进程文件访问权限应用模型: 进程的属主与文件属主是否相同,如果相同,则应用属主权限 否则,检查文件的属主是否属于文件的属组,如果是,则应用属主权限 否则,应用ot…

    Linux干货 2015-12-19
  • 路由实验

    实验需求 使用两台Linux主机充当路由器,配置路由条目,让两台PC机互通 1.将两台Linux主机添加两块虚拟网卡 2.配置R1路由器网络属性     3.配置R1路由器网络属性     4.配置PC1主机IP地址(Linux主机) 5.配置PC2主机的IP地址(Windows) 6.测试,PC1和PC2可以互通,之…

    Linux干货 2016-09-09
  • 软链接和硬链接及两者之间的不同

    在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号…

    Linux干货 2016-12-05
  • linux用户权限管理

       在linux文件系统中使用ls -l命令可以查看文件的属性,但是我们明白其中属性各自代表的意思吗?下面我们就来看一看,这其中的奥义。。。 文件属性 使用ls命令查看文件,可以发现列表分为几个部分,各自所代表的意义如图所示: 文件属性操作     chown 设置文件的所有者  &nb…

    Linux干货 2016-08-04
  • 自制linux与内核编译

    自制Linux系统 1分区并创建文件系统 fdisk/dev/sdb 分两个必要的分区 /dev/sdb1对应/boot /dev/sdb2对应根/ mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdb2 2挂载boot mkdir/mnt/boot mount /dev/sdb1 /mnt/boot ? 3安装grub grub-i…

    Linux干货 2016-09-13
  • 马哥教育首届IT技术博客大赛–复审阶段

    马哥教育首届IT博客大赛大众评审开始了 2016年马哥教育首届IT博客技术大赛,评委初审已结束,正式进入大众评审阶段。。。。 此次博客大赛,虽然因为准备时间比较仓促,举办经验略有不足(快去鄙视小编~&#x1f612;),但还是收到了10多位优秀的小伙伴共80篇博文(看看人家的劲头,这就是差距呀&#x1f613;)的参赛作品投递; 其中初审最高…

    Linux干货 2016-06-07