文件处理工具、grep、正则表达式:

Linux 文件处理工具、grep、正则表达式:

抽取文本的工具
    显示文件内容
        less    一页一页查看文件标准输出输出
        cat
            -E  显示行结束符¥
            -n  对显示的每一行进行编号
            -A  显示所有控制符
            -b  非空行编号
            -s  压缩连续的空行 形成一行
            
    文件截取
        head、tail
    按列抽取
        cut
    关键字抽取
        grep
    分页查看文件内容
        more    分页查看文件
            -d  显示翻页及退出提示
        
        查看时有用的命令包括
            /文本 搜索 文本
            n/N 跳到下一个 or 上一个匹配
        less 是man命令使用的分页器
        
    显示文本前、后行的内容
        head
            -c #    制定获取前#字符
            -n #    指定获取前#行
            -# 指定行数
            示列:    
            取出/etc/passwd的一到第四个字符
                head -c4 /etc/passwd   
        
        tail
            -c #    指定获取后#字节
            -n #    指定获取后#行
            -#
            -f  跟踪显示文件新追加的内容,常用日志监控
            示列:
                取出/etc/passwd最后的五个字符
                    # tail -c5 /etc/passwd
           
        
            
    
    按列抽取文本cut和合并文件paste
        cut
            -d  指明分隔符,默认tab
            -f  
                #:第#个字段
                #,#[#]:离散的多个字段,例如1,3,6
                #-#:连续的多个字段,例如1-6
                混合使用:1-3,7
            -c  按字符切割
            --output-delimiter=STRING指定输出分隔符
            示列:
                取出df的使用值
                df |cut -c44-47
                Use%
                  5%
                  0%
                  1%
                  1%
                  0%
                  1%
                  4%
                  1%
                  1%
                100%
            示列:取出/etc/passwd中的第一行
            [[email protected] testdir]# cut -d: -f1 /etc/passwd
            root
            bin
            daemon
            
        cat和past:
            显示文件或STDIN数据的指定列
                cut -d:-f1 /etc/passwd
                    [[email protected] ~]# cut -d: -f1 /etc/passwd  (显示第一列)
                    root
                    bin
                    daemon
                    
                cat /etc/passwd | cut -d: -f7 (显示第七列)
                    [[email protected] ~]# cat /etc/passwd | cut -d: -f7
                    /bin/bash
                    /sbin/nologin
                    /sbin/nologin
                    /sbin/nologin
                    
                cut -c2-5 /usr/share/dict/words (显示一列的第2-第5个字符)
            
                paste 合并两个文件同行号的列到一行
                    -d  分隔符:指定分隔符,默认用TAB
                    -s  所有行合成一行显示
                    paste f1  f2
                    paste -s f1  f2
          
                收集文本统计数据 wc:
                    计数单词总数、行总数、字节总数和字符总数
                    可以对文件或标准输出中的数据运行
                        $  wc story.txt
                        39     237      1901 story.txt
                        行数    字数    字符数
                    使用    -l  来只计数行数
                    使用    -w  来只计数单词总数
                    使用    -c  来只计数字节总数
                    使用    -m  来只计数字符总数
                    
                文本排序sort:
                    把整理过的文本显示在标准输出,不改变原始文件
                    $   sort[options] file(s)
                常用选型
                    -r  执行反方向(由上至下)整理
                    -n  执行按数字大小整理
                    -f  选项忽略(fold)字符串的字符大小写
                    -u  选项(独特,unique)删除输出中的重复行
                    -t  c   选项使用c做为字段界定符
                    -K  X   选项按照使用c字符分隔的X列来整理能够使用多次
                
                    uniq命令    从输入中删除重复的前后相接的行
                        -c  显示每行重复出现的次数
                        -d  仅显示重复过的行
                        -u  仅显示不曾重复的行
                        连续且完全相同方为重复
                    常和sort 命令一起配合使用
                        sort    userlist.txt | uniq -c
                    
                    比较文件
                    
                    比较两个文件之间的区别
                    $ diff foo.conf-broken foo.conf-works
                    5c5
                    <   use_widgets = no
                    ---
                    >   use_widgets = yes
                        注明第5行有区别(改变)
                        
                复制对文件改变patch
                diff 命令的输出被保存在一种叫做“补丁”的文件中
                    使用   -u  选项来输出 “统一的(unified)” diff格式文件,最适用于补丁文件
                patch  命令复制在其他文件中进行的改变(要谨慎使用!)
                    适用  -b  选项来自动备份改变了的文件
                    $ diff -u foo.conf-broken foo.conf-works > foo.patch
                    $ patch -b foo.conf-broken foo.patch
           
                
                
                、查出用户UID最大值的用户名、UID及shell类型
                    # cut -d: -f1,3,5 /etc/passwd | sort -n -t: -k 2 | tail -n 1
                
                、查出/tmp的权限,以数字方式显示
                    # stat /tmp | grep Uid | cut -d/ -f1 | cut -d"(" -f2
                     1777  
                
               
                Linux的文件处理三剑客
                    grep    文本过滤(模式:pattern)工具
                        grep,egrep,fgrep(不支持正则表达式搜索)
                    sed 文本编辑工具
                    awk Linux上的实现gawk,文本报告生成器
                    
                grep:全局性的搜索 正则表达式 打印对应的行
                
                    作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
                    模式:有正则表达式字符及文本字符所编写的过滤条件
                    
                grep
                    grep root /etc/passwd
                    [[email protected] ~]# grep root  /etc/passwd (搜索 root)
                    root:x:0:0:root:/root:/bin/bash
                    operator:x:11:0:operator:/root:/sbin/nologin
                    
                    grep "$USER" /etc/passwd
                    
                    grep ‘$USER‘ /etc/passwd   
                    
                    grep `whoami` /etc/passwd  ` `:里面必须是命令
                    
                    示列:
                        grep root /etc/passwd
                        显示root的字符以红色显示出来centos7  centos6是不显示红色的 要加上参数才行
                        [[email protected] testdir]# grep root /etc/passwd --color=auto
                        root:x:0:0:root:/root:/bin/bash
                        operator:x:11:0:operator:/root:/sbin/nologin
                        字符‘
                    
                grep:
                    grep [选项] [关键字] [文件]
                        示列:
                            grep root /etc/passwd
                            
                    选项参数:
                        --color=auto    对匹配到的文本着色显示
                        -v  不显示匹配到的行
                            grep -v root /etc/passwd 不显示root
                            
                        -i  忽略字符大小写
                             grep -i ROoT /etc/passwd
                       
                        -n  显示匹配的行号
                            # grep -n root /etc/passwd
                            1:root:x:0:0:root:/root:/bin/bash
                            10:operator:x:11:0:operator:/root:/sbin/nologin  
                       
                        -c  统计匹配的行数
                                grep -c root /etc/passwd  显示root有几个
                                2
                        -o  仅显示匹配到的字符串
                            # grep -o root /etc/passwd
                            root
                            root
                            root
                            
                        -q  静,默模式,搜到不显示
                            grep -q root /etc/passwd
                            
                        -A #:after,后#行
                            grep -n -A 3 root /etc/passwd  显示root的行和后面的3行都显示
                            
                        
                        -B #:before,前#行
                            # grep -n -B 3 root /etc/passwd 显示root的行和前面的3行
                        
                        -C #:context,前后各#行
                            grep -n -C root 显示root的行、和前后的各3行
                            
                        
                        -e:实现多个选项间的逻辑or关系
                            grep -e ‘cat‘ -e ‘dog‘ file
                            # grep -e  root  -e chen /etc/passwd
                        -w:整行匹配整个单词
                            # grep -w roo /etc/passwd
                        -E  使用ERE 支持扩展正则表达式
                        
                        
        正则表达式:
            REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
            程序支持
                grep、vim、less、nginx等
            分两类:
                基本正则表达式:BRE
                扩展正则表达式:ERE
                    grep -E,egrep
            正则表示式引擎:
                采用不同算法,检查处理
          
            字符匹配:
                .   匹配任意单个西服
                []  匹配指定范围的任意单个字符
                [^] 匹配指定范围外的任意但各自飞
                [[:digit:]] 任意数字,相当于0-9
                [[:lower:]] 任意小写字母
                [[:upper:]] 任意大写字母
                [[:alpha:]] 任意大小写字母
                [[:alnum:]] 任意数字或字母
                [[:space:]] 空格
                [[:punct:]] 标点符号
                                
            正则表达式:
                匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
                    *:匹配前面的字符任意次,包括0次
                    贪婪模式:尽可能长的匹配
                    .*:任意长度的任意字符
                    \?:匹配其前面的字符0或1次
                    \+:匹配其前面的字符至少1次
                    \{m\}:匹配前面的字符m次
                        # grep "ro\{2\}t" /etc/passwd
                    
                    \{m,n\}:匹配前面的字符至少m次,至多n次
                        # grep ‘root\{1,5\}‘ /etc/passwd
                    
                    \{,n\}:匹配前面的字符至多n次
                    
                    \{m,\}:匹配前面的字符至少m次
                位置锚定:定位出现的位置
                ^:行首锚定,用于模式的最左侧
                    grep "^root" /etc/passwd
                    
                $:行尾锚定,用于模式的最右侧
                    grep "bash$" /etc/passwd
                    
                ^PATTERN$: 用于模式匹配整行
               
                ^$: 空行
                    grep  -v "^$" f1
                    
                示列: 清除f1文件中的空白行
                     grep -v "^[[:space:]]*$" f1
               
                ^[[:space:]]*$ :空白行
                    [[email protected] ~]# grep -v "^[[:space:]]*$" f1
                    cat <<E
                    aa
                    bb
                    cc
                    E
               
                \< 或\b:词首,用于单词模式的左侧
                     grep "\<root\>" f1
                    或
                    grep “\broot\b” f1
                    root
                    root root root
                  
                \> 或\b:词尾锚定;用于单词模式的右侧
                
                    
                \<PATTERN\>:匹配整个单词
                分组:\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
                分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
                \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
                示列:\(string1\+\(string2\)*\)
                \1: string1\+\(string2\)*
                \2: string2
                后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
                
        练习:
            1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)、
                # grep "^S" /proc/meminfo
             
                # grep "^[Ss]" /proc/meminfo
                
                # grep -i "^[S]" /proc/meminfo
          
            2、显示/etc/passwd文件中不以/bin/bash结尾的行
                # grep -v "/bin/bash" /etc/passwd
                      
            3、显示用户rpc默认的shell程序
                # grep "\brpc\b" /etc/passwd | cut -d: -f7
            
            4、找出/etc/passwd中的两位或三位数
                # grep  -w -o "[0-9]\{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名的行
                # grep "^\(\b..*\b\).*\1$"  /etc/passwd
                
        扩展正则表达式:
字符匹配:
    .   任意单个字符
    []  指定范围的字符
    [^] 不在指定范围的字符
    
    次数匹配:
        *   匹配前面字符任意次
        ?  0或1次
        +   1次或多次
        {m} 匹配m次
        {m,n}   至少m,最多n次
        
    位置锚定:
        ^   行首
        $   行尾
        \<,\b   语首
        \>,\b   语尾
    分组:
        ()
        后向引用:\1,\2,. . .
    或者:
        a|b
        c|cat c或cat
        (C|c)at:Cat或cat
        练习
            显示当前系统root、mage或wang用户的UID和默认shell
            # grep -E "^(root|mage|wang):" /etc/passwd | cut -d: -f3,7
            0:/bin/bash
            2203:/bin/bash
            2204:/bin/bash

时间: 2024-11-10 11:23:02

文件处理工具、grep、正则表达式:的相关文章

标准I/O与管道;用户、组和权限;文件处理工具及正则表达式总结

四.标准I/O与管道标准输入和输出程序:指令+数据读入数据:Input输出数据:Output?打开的文件都有一个fd: file descriptor (文件描述符)?Linux给程序提供三种I/O设备?标准输入(STDIN)-0 默认接受来自键盘的输入?标准输出(STDOUT)-1 默认输出到终端窗口?标准错误(STDERR)-2 默认输出到终端窗口?I/O重定向:改变默认位置把输出和错误重新定向到文件?STDOUT和STDERR可以被重定向到文件命令 操作符号 文件名支持的操作符号包括: 把

grep文本查看工具及正则表达式

grep文本查看工具及正则表达式 grep:搜索及过滤文本工具: (根据用户所指定的"模式"搜索,过滤条件"对目标文件进行过滤性匹配):grep自带正则表达式引擎工具. 所谓模式:由正则表达式所得元字符及普通文本字符所编写出来的过滤条件"模式" grep:三种支持模式: grep:基本正则表达式 egrep:支持扩展正则表达式 fgrep :不支持正则表达式 三种支持模式因其可以(grep -E:切换扩展,egrep-G:切换基本,分别有以-F切换fgre

关于 文本处理工具、正则表达式、grep 的简单举例

文本处理工具 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 文件查看命令:cat,tac,rev cat [选项] [file] cat -n     对显示出的每一行进行编号 cat -b     非空行编号 cat -ns    连续压缩空行成一行 cat -v     显示回车符 cat -E     显示行结束符$ cat -A     显示所有控制符 tac file   反向显示内容 rev file   反向显示

Linux基础之文本处理工具grep及正则表达式(附带egrep与grep的不同)

文本处理工具grep,正则表达式在Linux学习过程中很容易出现困惑与障碍的地方,这里分享下学习这方面内容的一些感受. grep Global search REgular expression and Print out the line 作用:文本搜索工具,根据用户指定的'模式(过滤条件)'对目标文本逐行进行匹配检查:打印匹配到的行: '模式':由正则表达式的元字符及文本字符所编写出的过滤条件. grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS]

grep文本搜索工具与正则表达式

一.文本搜索工具grep (一)grep简介 Linux上常用的三个文本处理工具被人们称为Linux文本处理三剑客,他们分别是: 1.grep(egrep,fgrep):文本搜索工具,基于"pattern"对给定的文本进行搜索操作. 2.sed:stream editor,流编辑器,行编辑工具,文本编辑工具. 3.awk:GNU awk,文本格式化工具,文本报告生成器. 他们都是很优秀的文本处理工具.现在,我就重点介绍下grep. grep:global search regular

正则表达式和文本搜索工具grep

正则表达式是由字面文本和具有特殊意义的符号组成的.我们可以根据具体需求,使用它们构造出合适的正则表达式来匹配文本.它是一种匹配文本的通用语言.正则表达式是模式匹配技术的核心,借助合适的正则表达式,可以生成我们所需的各类输出结果,例如过滤.剥离.替换.搜索等. 正则表达式的基本组成部分 ^ #行起始标记(使用cat -a显示空格,行首,行尾等标记.) #示例 ^It 匹配以It起始的行 $ #行尾标记 #示例 It$ 匹配以It结尾的行 . #匹配任意一个字符 #示例:Hack.匹配Hackl和H

详解正则表达式以及文本处理工具&mdash;grep、egrep的用法和特性

一.grep (1)grep简介 grep:全称是Global search REgular expression and Print out the line,全局搜索正则表达式并输出合适的行. grep是一种强大的文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行.(只对文本进行搜索处理) Unix的grep家族包含grep.egrep和fgrep. (2)grep的用法 语法格式:grep [option]... 'PATTERN' FILE... 选

Linux学习汇总——Linux用户组管理,文件权限管理,文本处理工具grep及egrep

本章Blog相关Linux相关知识点 解析:在数据库按搜索码查找相对应的条目,并找与之对应额外的其他数据库的过程:名称解析:UID ,组名解析:GID 数据库:文本文件,sql数据库,ldap数据库,用户库:/etc/passwd ,密码库 :/etc/shadow,组库:/etc/group,组密码库:/etc/gshadow 加密方法:对称加密--加密和解密使用同一个密码,如DES,AES :公钥加密--每个密码都成对出现,一个公钥,一个私钥,如DSA,RSA:单向加密--常用于数据完整性校

正则 :grep 工具的正则表达式

             正则: .正则就是一串有规律的字符串 .正则对编写shell脚本有很大帮助 .各种编程语言中都有正则 正则工具:grep/egrep(egrep是grep的扩展).sed.awk                grep (过滤关键词)  格式: grep [-cinvABC] 'word' filename   (1)-c 行数   (2)-i 不区分大小写  (3)-n 显示行号  (4)-v 取反(过滤出不是关键字外的行)  (5)-r 遍历所有子目录  (6)-A