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 10:27
下一篇 2016-08-10 10:28

相关推荐

  • 第八周-Linux网络配置,软件安装,bash编程

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别 网桥:一种网络设备,负责网络桥接(network bridging)之用。桥接器将网络的多个网段在数据链路层(OSI模型第2层)连接起来(即桥接)。 集线器(Hub):是指将多条以太网双绞线或光纤集合连接在同一段物理介质下的设备。集线器是运作在OSI模型中的物理层。 二层交换机:工…

    Linux干货 2016-11-14
  • Linux任务计划,周期性任务执行详解

    Linux任务计划,周期性任务执行 概述 本章将为大家介绍一些任务计划和周期性任务计划执行相关内容任务计划的分类主要有由两种    未来的某时间点执行一次某任务:at,batch    周期性运行某任务:crontab具体分为三个方面来说明:    1、at计划任务    2、c…

    Linux干货 2016-09-27
  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-29
  • awk基本应用

    一、何为awk awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk明显复杂的多也强大的多。如果虽然awk可以实现grep和sed的一些功能,但是效率却比grep和sed慢。故如非是在show,否则建议不要使用awk去实现grep或sed的功能。在linux中awk其实是gawk,gawk是免费的。这才是重点。 二、awk语法 man下…

    Linux干货 2020-08-18
  • 网络管理实战(子网划分、单网卡多IP、多网卡单IP、Linux路由实现)

        1、某公司申请到一个C 类IP 地址,但要连接6 个的子公司,最大的一个子 公司有26 台计算机,每个子公司在一个网段中,则子网掩码应设为?          分析过程:C类地址标准的掩码为24位,因为有6个子公…

    Linux干货 2016-09-05
  • tomcat基础-如何给Tomcat前端加反向代理服务器

    Tomcat可以做为反向代理服务器的组件有很多,例如使用nginx,如果使用nginx,Tomcat就只能使用http连接器,另外一种是apache。如果是使用httpd,Tomcat两种连接器都能发挥作用,例如可以使用http连接器,也可以使用ajp连接器,

    Linux干货 2018-03-19