Linux文本处理工具grep

  1. 文件查看工具:cat

    将[文件]或标准输入组合输出到标准输出。

              -A, –show-all                                  等于-vET

              -b, –number-nonblank                           对非空输出行编号

              -e                                              等于-vE

              -E, –show-ends                                 在每行结束处显示"$"

              -n, –number                                    对输出的所有行编号

              -s, –squeeze-blank                             不输出多行空行

              -t                                              与-vT 等价

              -T, –show-tabs                                 将跳格字符显示为^I

              -u                                              (被忽略)

              -v, –show-nonprinting                          使用^ 和M- 引用,除了LFD和 TAB 之外

              –help                                     显示此帮助信息并退出

             –version                               显示版本信息并退出

2.分页查看文件:more

more [OPTIONS…] FILE… -d: 显示翻页及退出提示

3.单页查看文件:less

查看时有用的命令包括: /文本 搜索 文本 n/N 跳到下一个 或 上一个匹配 less 命令是man命令使用的分页器

4.获取文本前几行:head     -n:指定获取第几行              -c:指定获取多少字节

5.获取文件后几行:tail     -n:指定获取第几行              -c:指定获取多少字节

6.文件分割工具:cut

        -d DELIMITER: 指明分隔符,默认tab 例如:-d":"

        -f 指定获取字段: 

                            #: 第#个字段 

                            #,#[,#]:离散的多个字段,例如1,3,6

                            #-#:连续的多个字段, 例如1-6 

                            混合使用:1-3,7 -c 

                            按字符切割 –output-delimiter=STRING指定输出分隔符

                   例如;我们要获取/etc/passwd下面的用户名以及uid和shell类型??

                 [root@localhost ~]# cat /etc/passwd | cut -d: -f1,3,7

7.合并工具:paste 

                            合并两个文件同行号的列到一行 

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

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

            [root@localhost ~]# paste -s luyubo.txt luyubo1.txt

8.文本统计工具:wc

                wc可以用来统计单词总数,行总数,以及字节总数,字符总数。

                用法:wc [选项]… [文件]…

               或:wc [选项]… –files0-from=F

        输出每个指定文件的行数、单词计数和字节数,如果指定了多于一个文件,继续给出所有相关数据的总计。如果没有指定文件,或者文件为"-",则从标准输入读取数据。

  -c, –bytes输出字节数统计

  -m, –chars输出字符数统计

  -l, –lines输出行数统计

      –files0-from=文件从指定文件读取以NUL 终止的名称,如果该文件被

指定为"-"则从标准输入读文件名

  -L, –max-line-length         显示最长行的长度

  -w, –words显示单词计数

9.文本排序工具:sort

                我们这里列出几个常用的几个选项

                                -r 执行反方向(由上至下)整理

                                -n 执行按数字大小整理 

                                -f 选项忽略(fold)字符串中的字符大小写

                                -u 选项(独特,unique)删除输出中的重复行

                                -t  c 选项使用c做为字段界定符

                                -k  X 选项按照使用c字符分隔的X列来整理能够使用多次

10.统计重复次数:uniq

                                -c: 显示每行重复出现的次数 

                                -d: 仅显示重复过的行 

                                -u: 仅显示不曾重复的行 连续且完全相同方为重复 

              #一般配合sort使用。soft luyubo.txt | uniq -c

Linux文本处理三剑客之一——grep

                grep就像是一个筛选器一样。功能有多强大,就看我们怎么去灵活的使用,结合正则表达式。

用法: grep [选项]… PATTERN [FILE]…

在每个 FILE 或是标准输入中查找 PATTERN。

默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。

例如: grep -i 'hello world' menu.h main.c

正则表达式选择与解释:

                         -E: –extended-regexp     PATTERN 是一个可扩展的正则表达式(缩写为 ERE)

                         -F: –fixed-strings       PATTERN 是一组由断行符分隔的定长字符串。

                         -G: –basic-regexp        PATTERN 是一个基本正则表达式(缩写为 BRE)

                         -P: –perl-regexp         PATTERN 是一个 Perl 正则表达式

                         -e: –regexp=PATTERN      用 PATTERN 来进行匹配操作

                         -f: –file=FILE           从 FILE 中取得 PATTERN

                         -i: –ignore-case         忽略大小写

                         -w: –word-regexp         强制 PATTERN 仅完全匹配字词

                         -x: –line-regexp         强制 PATTERN 仅完全匹配一行

                         -z: –null-data           一个 0 字节的数据行,但不是空行

                         -v: –invert-match        显示不能够被pattern匹配到的行; 

                         -q: –quiet               静默模式,不输出任何信息

                         -o: –only-matching       仅显示匹配到的字符串;

                         -c: –count               统计匹配的行数

                         -n: –line-numbe          显示匹配的行号

                         -A #:–after-context=NUM   after, 后#行 

                         -B #:–before-context=NUM  before, 前#行

                         -C #:–context=NUM        前后各#行  

输出控制:

                          -m: –max-count=NUM       NUM 次匹配后停止

                          -b: –byte-offset         输出的同时打印字节偏移

                          -n: –line-number         输出的同时打印行号

                              –line-buffered       每行输出清空

                          -H: –with-filename       为每一匹配项打印文件名

                          -h: –no-filename         输出时不显示文件名前缀

                              –label=LABEL         将LABEL 作为标准输入文件名前缀文件控制:

                          -B: –before-context=NUM  打印以文本起始的NUM 行

                          -A: –after-context=NUM   打印以文本结尾的NUM 行

                          -C: –context=NUM         打印输出文本NUM 行

正则表达式(REGEXP):由一类特殊字符及文本字符所编写的模式,其中有 些字符(元字符)不表示字符字面意义,而表示控制或通配 的功能 

       正则表达式分为两类:

                    基本正则表达式:BRE

                    扩展正常表达式:ERE            grep -E   -egrep

       正则表达式引擎:

                    采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions) 

       元字符分类:字符匹配、匹配次数、位置锚定、分组      这里我理解为正则里面功能分支

       基本正则表达式元字符:

                                .   : 匹配任意单个字符; 

                                []  : 匹配指定范围内的任意单个字符 

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

                                ^ 行首

                                $ 行尾

                                . 任意单一字符 

                                [] []内任意单一字符 

                                [^] 除[]内任意单一字符 

                                * *前面字符重复不确定次数 

                                \+ \+前面字符重复一次以上不确定次数 

                                \? ?前面字符重复0或1次 

                                \ 转义符

                                .* 任意长度字符 

                                \{n\} 前面字符重复n次

                                \{n,\} 前面字符重复n次以上 

                                \{m,n\} 前面字符重复m次和n次之间

                                [:alpha:] 所有字母,包括大、小写 

                                [:alnum:] 所有字母和数字 

                                [:upper:] 所有大写字母 

                                [:lower:] 所有小写字母 

                                [:digit:] 所有数字 

                                [:punct:] 所有标点符号 

                                [:space:] 空格和Tab

正则表达式:

            匹配次数:用在要指定次数的字符后面,用于指定前面的字 符要出现的次数 

                                *:匹配前面的字符任意次,包括0次 

                                贪婪模式:尽可能长的匹配

                                .*:任意长度的任意字符 

                                \?:匹配其前面的字符0或1次 

                                \+:匹配其前面的字符至少1次 

                                \{n\}:匹配前面的字符n次 

                                \{m,n\}:匹配前面的字符至少m次,至多n次 

                                \{,n\}:匹配前面的字符至多n次 

                                \{n,\}:匹配前面的字符至少n次

           位置锚定:定位出现的位置 

                                ^:行首锚定,用于模式的最左侧

                                 $:行尾锚定,用于模式的最右侧 

                                ^PATTERN$: 用于模式匹配整行 

                                ^$: 空行 

                                ^[[:space:]]*$ :空白行 

                                \< 或 \b:词首锚定,用于单词模式的左侧 

                                \> 或 \b:词尾锚定;用于单词模式的右侧 

                                \<PATTERN\>:匹配整个单词

         分组表示:

                                \(\):将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:\(root\)\+ 

                                分组括号中的模式匹配到的内容会被正则表达式引擎记录 于内部的变量中,这些变量的命名方式为: \1, \2, \3, … 

                                \1: 从左侧起,第一个左括号以及与之匹配右括号之间 的模式所匹配到的字符 

                                实例:

                                 \(string1\+\(string2\)*\)

                                 \1: string1\+\(string2\)* 

                                 \2: string2 

                                后向引用:引用前面的分组括号中的模式所匹配字符(而 非模式本身)

扩展正则表达式

              #扩展表达式支持一些新的语法。

                egrep = grep -E

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

                                字符匹配:

                                         .  任意单个字符

                                         [] 指定范围的字符 

                                        [^] 不在指定范围的字符 

                                 次数匹配:

                                        *:匹配前面字符任意次 

                                        ?: 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/31695

(0)
闹钟哥闹钟哥
上一篇 2016-08-10
下一篇 2016-08-10

相关推荐

  • 16 文本处理工具

    文本处理工具一 一、杂项知识整理 1、ps axo user,ruser,cmd 查看命令发起者的身份和真正的登录身份: [root@localhost test]# ps axo user,ruser,cmd USER     RUSER  &nb…

    Linux干货 2016-08-05
  • 马哥教育网络班22期+第2周课程练习

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。      文件管理命令有:mkdir  rm  tree  ls  等等  1、mkdir [options] /path/to/somewhere      &…

    Linux干货 2016-08-22
  • 人志建,则无敌—网络基本知识加简单脚本练习

    马哥21期网络班-8周博客作业 1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:网桥就是把2个不同的网段桥接起来;可隔离冲突域。 集线器:集线器就是把多根以太网线或光纤集合连接在同一段物理介质下的装置;工作在物理层;不能隔离冲突域。 二层交换机:工作于OSI模型的第2层(数据链路层),故而称为二层交换机。二层交换技术的发…

    Linux干货 2016-08-29
  • 搭建yum仓库

    搭建yum仓库 背景: 在学习完如何搭建yum仓库后,觉得搭建yum仓库很有意义,将自己学习中的感悟和理解记录下来,以备日后复习。 介绍: yum:全称是Yellow dog Updater, Modified。它是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可…

    2017-08-05
  • 二维码的生成细节和原理

    二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。 关于QR Code…

    Linux干货 2016-08-15
  • linux基础学习之进程管理和任务计划

    内容:   进程相关概念(用户空间、内核空间,进程、线程)   进程及系统相关工具(ps、top、pgrep、pidof、kill)   调整nice值(nice、renice)   作业管理(jobs、fg、bg、kill,&)   计划任务(at、crontab) 一、进程相关概念 内核的功用:进…

    Linux干货 2016-09-07