文本处理工具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
下一篇 2016-08-04

相关推荐

  • DNS资源记录类型

      资源记录   资源记录(Resource Records),简称RRs。是指每个域所包含的与之相关的资源。例如,每个RR都包括这个域的所属(RR是从哪个域名中得到的),类型(什么样的资源存在于这个RR中),TTL(time to live,存活时间)等等。 DNS包括七大资源记录 A记录:也称为主机记录,是DNS名称到IP地址的映射,用于正向解…

    Linux干货 2017-02-08
  • 8 文本查看、处理与统计分析

    文本查看 cat cat [OPTION]… [FILE]… 该命令用于正向查看文本文件,但不可分页,一次性显示完成 参数说明 参数 说明 -E 显示行结束符$ -n 对显示出的每一行进行编号 -A 显示所有控制符 -b 非空行编号 -s 压缩连续的空行成一行 -T 显示tab为^I 示例  tac tac […

    Linux干货 2016-08-10
  • 文本处理工具(一)

    文本处理工具 查看工具 cat;tac;rev;more cat 连接文件,并打印到标准输出上。 注意:当文件比较大的时候,文本在屏幕上一闪而过,导致无法看清内容,所以对于较大的文件建议结合着more,less等命令结合来用。 使用方法: -E: 显示行结束符$ -n: 对显示出的每一行进行编号 空行也加行号 -A:显示所有控制符 相当于-ETV -b:非空…

    2017-06-01
  • python高阶函数与装饰器

    ##**高阶函数**– 函数是python中的一等公民– 函数也是对象,可调用对象– 函数可以作为普通变量、参数、返回值等等– 数学概念y = g(f(x))– 高阶函数满足以下至少一个条件:1.接收一个或多个函数作为参数 2.输出一个函数 ##**举例(计数器)**def counter(base…

    Linux干货 2017-10-23
  • 计算机的组成和Linux发展史

    计算机的组成及功能   计算机是由CPU,内存,输入装置和输出装置四大部件组成计算机,每一部件分别按要求执行特定的基本功能。  CPU: 控制器和运算器合称中央处理器,也就是CPU,它的功能主要是解释计算机指令以及处理计算机软件中的数据。  内存: 它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,内存(Me…

    Linux干货 2016-10-30
  • 谈谈对于vmware Workstation 网络连接三种模式的认识.

    简介: VM(VMware Workstation简称VM,后面都将用VM代替阐述)是一款功能强大的虚拟化软件.VM支持在 单一的桌面上同时运行多款不同的操作系统,能够模拟完整的网络环境,支持pxe功能.实时快照,等等多种强 大的功能.能够测试软件和部署新的业务测试.同时节约了很多资源.节约了企业成本.所以对于广大的互联网 从业者是不可多得的好工具. 本文中…

    Linux干货 2015-08-24