linux文本处理三剑客—grep

 

cat:concatenate 文本文件查看工具
 cat [option] filename…
 -n:给显示出来的文本行加上编号
 -b:非空行编号
 -V:显示 ^
 -E:显示行结束符$
 -T:显示制表符
 -A:显示所有控制符-A=-VET
 -s:压缩连续的空行成一行
 如:cat /etc/fstab /etc/passwd 同时查看多个文件
 df | cut -d:

tac:文本文件查看工具
 用法同cat 只是文件内容的行逆序显示

rec:文本文件查看工具
    用法同cat 只是文本文件每一行的内容倒过来显示

head:查看文件的前几行(默认10行)
  head [option] FILE
  head -n #:指定查看行数,可简写为:-#

tail:查看文件的后几行(默认10行)
  tail [option] FILE
  tail -n #:指定查看行数,可简写为:-#
     -f:查看文件尾部内容结束后不退出
      跟随显示新增的行,监控日志文件增长时非常有用
  tail -f -n0 test.txt & 后台运行日志文件监控

分屏查看命令:more,less
 more:more file
  特点:翻屏至文件尾部时自动退出

 less:less file
  man调用的就是less命令,用法同man一样

cut:剪辑命令——筛选显示文件内容
 cut [OPTION]… [FILE]…
  -d 指定分隔符(默认tab)
  -f 指定显示字段
   #: 第#个字段
   m,n:第m段,第n段
   m-n:第m段到第n段
   混合使用:m-n,#
  -c 按字符切割
  –output-delimiter=STRING指定输出分隔符
  如:cut -d:-f1,5,7 /etc/passwd

paste 合并两个文件同行号的列到一行后显示
 paste [OPTION]… [FILE1] [FILE2]…
 -d 分隔符:指定分隔符(默认用TAB)
 -s : 先将文件各自所有的行合成一行后再把两个文件的内容合并显示
  paste file1 file2 > file 产生真实合并效果
  paste  -s file1 file2

wc:world count文本统计命令
   wc [option] file
    -l:仅显示文本文件的行数
    -w:仅显示文件文件的字数
    -c:仅显示文本文件的字节数
    -m:仅显示文本文件的字符数
   
sort:文件内容排序显示
 sort [option] file
   -n:以数值大小进行排序
   -u:排序后去重
   -f:忽略字符大小写
   -r:逆序排列
   -t:指定分隔符
   -k:指定排序字段
 如:sort -nt: -k3 /etc/passwd

uniq:显示文件中的重复行(完全相同切连续的行)
 uniq [option] file
    -d:只显示重复的行
    -c:显示文件中行重复的次数
    -u:仅显示不重复的行
  常和sort 命令一起配合使用:
  sort  userlist.txt  |  uniq -c

diff:比较两个文件之间的区别
 diff [option] file1 file2
 如:diff foo.conf-broken foo.conf-works
  5c5
  < use_widgets = no
  —
  > use_widgets = yes
   注明第5行有区别(改变)

 diff 命令的输出被保存在一种叫做“补丁”的文件中,使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件。
 patch 命令复制在其它文件中进行的改变(要谨慎使用!)
     适用 -b 选项来自动备份改变了的文件
 diff -u foo.conf-broken foo.conf-works > foo.patch
 patch -b foo.conf-broken foo.patch

linux文本处理三剑客
  grep:文本过滤工具
   sed:stream editor,流编辑器
   awk:Linux上的实现gawk,文本报告生成器

grep: Global search REgular expression and Print out the line
   用途grep:根据模式搜索文本,并将符合模式的文本行显示出来
   parttern(模式):文本字符和正则表达式的元字符组合而成的匹配条件
 grep, egrep, fgrep(不支持正则表达式搜索)

grep [OPTIONS] PATTERN [FILE…]
  –color=auto: 对匹配到的文本着色显示;
  -v: 显示不能够被pattern匹配到的行;
  -i: 忽略字符大小写
  -n:显示匹配的行号
  -c: 统计匹配的行数
  -o: 仅显示匹配到的字符串
  -q: 静默模式,不输出任何信息
  -A #:after, 显示匹配行之后相连的#行
  -B #: before, 显示匹配行之前相连的#行
  -C #:context, 显示匹配行前后各#行
       -w:整行匹配整个单词
  -E:使用扩展正则表达式 等同于egrep
  -e:多个选项间的逻辑或关系
  如:grep –e ‘cat ’  -e ‘dog’  file

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
  程序支持:grep, vim, less,nginx等
 分两类:
  基本正则表达式:BRE
  扩展正则表达式:ERE
 正则表达式引擎:
  采用不同算法,检查处理正则表达式的软件模块
  PCRE(Perl Compatible Regular Expressions)
 元字符分类:字符匹配、匹配次数、位置锚定、分组

 字符匹配:使用时元字符外面需再套一个[]
  .   : 匹配任意单个字符;
  []  : 匹配指定范围内的任意单个字符
  [^] :匹配指定范围外的任意单个字符
  [:digit:]所有数字
  [:upper:]所有大写字母
  [:lower:]所有小写字母
  [:alpha:]所有大小写字母
  [:alnum:]数字和大小写字母
  [:punct:]标点符号
  [:space:]空格

 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
  *:匹配前面的字符任意次,包括0次
     贪婪模式:尽可能长的匹配
   \:转义符
  .*:任意长度的任意字符
  \?:匹配其前面的字符0或1次
  \+:匹配其前面的字符至少1次
  \{m\}:匹配前面的字符m次
  \{m,n\}:匹配前面的字符至少m次,至多n次
  \{,n\}:匹配前面的字符至多n次 <=n
  \{m,\}:匹配前面的字符至少m次 >=n

 位置锚定:定位出现的位置
  ^:行首锚定,用于模式的最左侧
  $:行尾锚定,用于模式的最右侧
  ^PATTERN$: 用于模式匹配整行
  ^$: 空行
  ^[[:space:]]*$ :空白行
  \< 或 \b:词首锚定,用于单词模式的左侧
  \> 或 \b:词尾锚定;用于单词模式的右侧
  \<PATTERN\>:匹配整个单词

 分组:\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
  分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
  \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;

  后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
  找出帐户列表中用户名和SHELL名称一样的行

egrep及扩展正则表达式
 egrep = grep -E
 egrep [OPTIONS] PATTERN [FILE…]
 扩展正则表达式的元字符:
 字符匹配:
  . 任意单个字符
  [] 指定范围的字符
  [^] 不在指定范围的字符

 次数匹配:
  *:匹配前面字符任意次
  ?: 0或1次
  +:1次或多次
  {m}:匹配m次
  {m,n}:至少m,至多n次

 位置锚定:
  ^  :行首
  $  :行尾
  \<, \b :语首
  \>, \b :语尾
  分组:
  ()
 
 后向引用:\1, \2,
 或者:
  a|b
  C|cat: C或cat
  (C|c)at:Cat或cat

原创文章,作者:爱情防火墙,如若转载,请注明出处:http://www.178linux.com/29274

(0)
爱情防火墙爱情防火墙
上一篇 2016-08-05
下一篇 2016-08-05

相关推荐

  • 海量数据处理算法—Bloom Filter

    1. Bloom-Filter算法简介         Bloom-Filter,即布隆过滤器,1970年由Bloom中提出。它可以用于检索一个元素是否在一个集合中。        Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表…

    Linux干货 2015-10-22
  • 再不自动化就晚啦!优云教你4步打造基于CentOS的产品镜像

    随着Linux程序的增多,软件的安装过程中经常出现如下问题: 1、硬件配置类似或者相同时,批量安装系统和软件,希望实现自动化安装,减少安装时间和人为出错。 2、工程实施人员在不同客户现场进行系统和软件安装(硬件配置不同),由于硬件有差别,不容易实现自动化。 笔者针对以上场景,从提高生产效率,减少误操作的立场,提出如下解决方案,希望能达到抛砖引玉的目的,并能与…

    系统运维 2016-07-16
  • 查找 -数据结构

    几种查找算法:顺序查找,折半查找,分块查找,散列表 一、顺序查找的基本思想:  从表的一端开始,向另一端逐个按给定值kx 与关键码进行比较,若找到,查找成功,并给出数据元素在表中的位置;若整个表检测完,仍未找到与kx 相同的关键码,则查找失败,给出失败信息。 说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败。很明显的缺点就是查找效…

    Linux干货 2015-07-28
  • bash功能特性三 命令的引用、展开和补全

    一、bash的补全功能     1、命令补全     根据内建命令或外部命令的查找方式,查找以用户指定的字符串开头的命令,如果用户指定的开头字符串能惟一标识某命令,则tab键可以补全此命令,否则,则两次tab链可显示所有以指定字符串开头的命令。   &nbsp…

    Linux干货 2015-04-15
  • SQL优化大全

    1. 优化SQL步骤 1. 通过 show status和应用特点了解各种 SQL的执行频率        通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extende d-status 命令获得。 SHOW STATUS 可以根据需要显示 session 级别的统计结果和 g…

    Linux干货 2015-04-13
  • shell脚本编程之if条件判断与for、while、until循环

    一、if语句 语法: if 测试条件1 ; then        分支1 elif  测试条件2; then        分支2 … else&nbsp…

    Linux干货 2015-08-24