文本处理工具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

相关推荐

  • 04用户和组的相关配置文件总结

    1、用户 个人理解的是,给使用者一个在系统中使用的身份,即用户。 用户分两种:管理员和普通用户。 而每一个用户都有一些属性,每一个属性都是用冒号分割开来。配置文件存储在【/etc/passwd】中。 例如,sarash:x:507:508::/home/sarash:/bin/nologin 他们分别是,用户名,密码,ID号,主组ID号,注释,家目录,默认登…

    Linux干货 2016-10-24
  • 第六周作业

    vim编辑器的使用 vim在工作过程中有三种模式:编辑模式、输入模式、末行模式 编辑模式:也叫命令模式,键盘操作常被理解为编辑命令。 输入模式:在文本文件中输入内容。 末行模式:vim内置的命令行接口,执行vim的内置命令。 vim的使用 打开文件:#vim [OPTIONS]…[FILE]… +#:打开文件后,直接让光标处于第#行 …

    Linux干货 2017-07-04
  • 11.网络解析和网络加密

    1、详细描述一次加密通讯的过程,结合图示最佳。 加密过程 1.使用单向加密算法,提取A的文件的特征码。 2.使用A的私钥对提取出来的特征码进行加密,把加密后的特征码附加在A的文件的后面。 3.使用对称加密对刚刚的A的文件和加密后的特征码进行加密,生成对称加密密钥 4.使用B的公钥对第3步骤的对称加密的密钥进行加密,加密后附加在文件的后面。 解密过程 1.使用…

    2017-09-20
  • Linux开班典礼

    心得体会和近一周学习计划

    2018-03-26
  • Centos 编译内核操作实践

    §·编译内核: ※·程序包的编译安装: ./configure   make   make install 前提:开发环境(开发工具,开发库),头文件(/usr/include)  开源: 源代码开发—->可执行格式,(不同Linux的发行版以自己的理解,发行的软件不同) 发行版:以“通用”…

    Linux干货 2016-09-13
  • 网络理论基础

    一、网络概述   1、什么是网络     网络就是通过有线或无线技术将各种硬件设备连接起来进行数据传输的一种方式。   2、网络的分类     根据距离范围可以将网络划分为局域网和广域网。       局域网:传输距离较近,传输速率快。     &n…

    Linux干货 2016-01-11