首页 > 其他分享 >grep文本处理工具

grep文本处理工具

时间:2024-08-09 23:49:39浏览次数:6  
标签:字符 grep 文本处理 etc rc 匹配 工具 任意

bash的特性:

  变量

  快捷键

  命令别名

  命令行展开:{},~

  管道

  输入、输出重定向

  编程

  命令行补全

  路径补全

 

1、文本处理命令

      字符统计wc:word count,wc [options] FILE  

            -l:只显示行数

            -w:只显示单词

            -c:只显示字符数

      转换tr:translate,tr '原来的字符集合' '转换为的字符集合',输入重定向或者管道输出的命令

          -d '字符集合':把出现的文件组的,属于字符集合中的字符统统删除  

                    eg:  echo "hello world" | tr -d 'abcde'     ---->hllp worl

      (取列的操作)文本切割cut:能够指定的符号作为行中内容的分隔符        ,将每一行切片,而只取出某些片

                cut [options] FILE

                          -d指定分隔符,默认分隔符为空白

                          -f1,5指定那个字段

      与cut命令相反的join:

          排序sort:默认是以ASCII字符排序的

         -f:排序时忽略字符大小写

         -n:以数值大小进行排序                

         -r:降序

         -u:移除重复的行,只保留一个

         -R:随机排序

         -t:指定分割符

         -k:指定那个字段                  

      与uniq一起使用sort

          -c:统计每行重复的次数

          -u:只显示没有重复的行

          -d:只显示重复的行                  

 grep(取行的操作):选择,grep 文本过滤工具 Globel Search Regular Exmpression and Printing

    grep    [options]    'pattern'     FILE

    命令      选项         模式        文件

        不加引号:直接过滤字符串

        加引号:在进行模式匹配的时候必须加引号,单引和双引号都可以

        必须加双引号:引用变量的时候

       [options];

     --color=auto

         -r:递归的搜索

         -c:统计有多少行匹配模式

         -e:可以指定多个匹配模式 用法: -e "pattern1"  -e"pattern2" 结果输出的是条件或者的关系

     -v:反向选取,只显示不符合模式的行

         -n:把匹配的行的行号标出来

     -o:只显示被模式匹配到的字符串,而不是整个行

         -i:匹配时不区分大小写

     -A #:显示匹配到的行时,顺便显示后面的#行

     -B #:前面的#行

     -C #:前后的#行

     -E:使用扩展的正则表达式

          grep -E        相当于 egrep                  

      grep                          egrep                             fgrep

         默认支持基本正则表达式    支持扩展正则表达式         不支持正则表达式元字符,搜索快

        正则表达式是一类字符所书写的模式(pattern)

         元字符:不表示字符本身的意义,而用于额外功能性的描述

         正则表达式:基本正则表达式,扩展正则表达式

          支持基本正则表达式的元字符:贪婪模式(尽可能长地去匹配符合模式的内容)

            ^:锚点行首的符合条件的内容,用法格式"^pattern"

                $:锚点行首的符合条件的内容,用法格式"pattern$"

            ^$:空白行

                .:匹配任意单个字符

                *:匹配紧挨在前面的字符任意次(0,1,多次)

                  a*b---> ab,aab,acb(不能),b

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

                    eg:

                          [root@localhost ~]#  grep ".n*n" /etc/rc.d/rc.sysinit |wc -l     //匹配n前面有单个字符,然后n出现了任意次,随后还有一个n

               511

                          [root@localhost ~]# grep ".n.*n" /etc/rc.d/rc.sysinit | wc -l    //匹配n前面有单个字符,然后n与n之间有任意长度的任意字符

                               314

                       

                \?:匹配紧挨在前面的字符0次或1次

                    a\?b---

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

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

                \{m\}:精确匹配前面的m次

            \{0,n\}:0到n次          

                \<:锚点词首----相当于 \b,用法格式:\<pattern

                \>:锚点词尾,用法格式:\>pattern

                \<pattern\>:单词锚点

                \(\):分组,用法格式:\(pattern\)

                 \(a.b\).*\1    

               eg:  [root@localhost ~]# cat 2.txt

             He like his liker

             He love his liker

             She love her lover

             She like her lover

             [root@localhost ~]# grep "\(l..e\).*\1r" 2.txt

             He like his liker

             She love her lover

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

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

                       [:digit:] : 所有数字, 相当于0-9

                           [0-9]---> [[:digit:]]

                       [:lower:]:所有的小写字母

                       [:upper:]:所有的大写字母

                       [:alpha:]: 所有的字母

                       [:alnum:]: 相当于0-9a-zA-Z

                       [:space:]: 空白字符

                       [:punct:]:所有标点符号

                       export        GREP_COLOR='01:32'

               扩展正则表达式:

         .:

         []:

        [^]:

         *:

                 ?:

                 {m,n}:至少m次,至多n次

                 ():

                 +:

                 a|b: c|Cat---> c,Cat

                 \<:

                 \>:

                 

man 7 regex                  

man bash---PS1

 

bash的配置文件:

  profile类:交互式登录用户:顺序 /etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc

     /etc/profile:全局,对所有用户有效

         /etc/profile.d/*.sh:全局,对所有用户有效

         ~/.bash_profile:仅对某用户自己有效

         功能:设定环境变量和运行命令或脚本

   bashrc类:非交互式登录用户  顺序~/.bashrc-->/etc/bashrc--->/etc/profile.d/*.sh

          /etc/bashrc:全局有效

          ~/.bashrc:仅对某用户自己有效

          功能:设定本地变量和定义命令别名

export PATH=$PATH:/root          

                 

2、命令别名:  

   alias 别名='正常命令'

       unalias 别名

       当别名跟命令的名字相同时,如果使用原有的命令而非别名,则使用" \命令"

       

       别名的作用范围是当前shell进程,想要shell永久生效,需要定义在配置文件中

        echo 'alias grep="grep --color"' >> /etc/bashrc----> source /etc/bashrc

 

3、管道:  shell COMMAND1 | COMMAND2

        echo pass123 | passwd --stdin user1

               

               

4、将默认数据流改为其它设备,就称作为IO重定向

            stdin:Standard Input       标准输入,默认输入fd:0  设备是键盘

        stdout:Standard Output        标准输出,默认输出fd:1  设备是监视器

                                       错误输出fd:2           设备是监视器

  输入重定向  

   <: COMMAND < /from/somewhere

  <<:Here Document,此处创建文档

   cat > filename << EOF

       xx

       xx

       EOF (通常用于脚本中生成文档)

       cat << EOF

       xxx

       xxx

       EOF(通常用于脚本中想用户输出大段信息)

  输出重定向

     >覆盖重定向 set -C:避免覆盖(强制覆盖>|)已经存在的文件中的内容,set +C关闭避免覆盖的功能

         >>追加重定向

         /dev/null:数据黑洞

  错误输出重定向

    2>覆盖重定向

    2>>追加重定向

同时重定标准输出和错误输出

   COMMAND > /path/to/stdout 2> /path/to/error

标准输出和错误输出定向至一个文件

   COMMAND &> /path/to/somewhere

   COMMAND > /path/to/somewhere 2>&1        

       

5、tee命令即到屏幕上面显示,又保存到文件中

  COMMAND1 | tee /path/to/somefile [| less]        

 

5、语言控制结构

    顺序执行

        选择执行

        循环执行

       

       

练习:

1、显示/proc/meminfo文件中以不区分大小的s开头的行;

  #grep "^[sS]" /proc/meminfo

 

2、显示/etc/passwd中以nologin结尾的行;

 #grep "nologin$" /etc/passwd

 

3、取出默认shell为/sbin/nologin的用户列表

# grep "/sbin/nologin" /etc/passwd | cut -d: -f1

 

4、取出默认shell为bash,且其用户ID号最小的用户的用户名

#grep "bash$" /etc/passwd | sort -t: -k3 | head -1 | cut -d: -f1

#grep "bash"  /etc/passwd | awk -F: -v OFS=":" '{ print $3,$1}' |sort -n | head -1 | cut -d: -f2

 

5、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;

#grep "^#[[:space:]]\{1,\}[^[:space:]].*" /etc/inittab

 

6、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;

#grep ":[[:digit:]]:" /etc/inittab

 

7、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;

#grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf

 

8、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;

#grep "^\([[:digit:]]\).*\1$" /etc/inittab

#grep "^\([0-9]\).*\1$"  /etc/inittab

 

9、显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;

#grep "^#[[:space:]]\{1,\}[^[:space:]]"  /etc/rc.d/rc.sysinit

 

10、显示/etc/rc.d/rc.sysinit中符合形为"任意单个字符n任意字符任意单个字符n"模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,

   而后是任意单个字符后面跟了个n;

#grep ".n.*n" /etc/rc.d/rc.sysinit

 

11、显示/etc/rc.d/rc.sysinit中符合形为"任意单个字符n任意字符任意单个字符n"模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,

而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同;

#grep "\(.n\).*\1" /etc/rc.d/rc.sysinit

 

12、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;

#grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf

 

13、找出某文件中的,1位数,或2位数;

#grep "\<[[:digit:]]\{1,2\}\>"

 

14、找出ifconfig命令结果中的1-255之间的整数;

#ifconfig | grep "\<[1-9]\{1,3\}\>"

grep -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"  

 

15、查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd        

#grep "^student\>" /etc/passwd

 

16、统计/usr/bin/目录下的文件个数;

# ls /usr/bin | wc -l

 

17、取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示;

# cut -d: -f7 /etc/passwd | sort -u | grep -v "^$"

 

18、思考:如何显示/var/log目录下每个文件的内容类型?

# file /var/log/*

# cd /var/log ; file `ls /var/log`

 

19、取出/etc/inittab文件的第5行;

# head -5 /etc/inittab | tail -1

 

20、取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中;

# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users

 

21、显示/etc目录下所有以pa开头的文件,并统计其个数;

# ls /etc/pa* | wc -l

 

22、不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文尾部;

# echo 'alias cls=clear' >> ~/.bashrc

 

22、显示/proc/cpuinfo中的processor开头且后面跟了至少1个空白字符的行;而后统计相关的行数;

#grep --color "^processor[[:space:]]\{1,\}" /proc/cpuinfo | wc -l

 

23、显示/var/log/secure文件中包含"Failed password"或"FAILED LOGIN"的行;而后统计相关的行数;

#grep -E "(Failed password)|(FAILED LOGIN)" /var/log/secure | wc -l

 

24、显示/var/log/secure文件中记录的属于当前系统时间的前一天的信息中包含"Failed password"或

"FAILED LOGIN"的行;而后统计相关的行数;

# Date=`date +"%b %e" -d'-1 day'`;grep "$Date" /var/log/secure | grep -E "(Failed password | FAILED LOGIN)" | wc -l

 

25、找出netstat -tan命令执行的结果中以TIME_WAIT或ESTABLISHED结尾的行;

#netstat -ant | grep  -E "(TIME_WAIT | ESTABLISHED)" --color

 

匹配真正的IP地址

1.0.0.1----223.255.255.254

#ifconfig | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" | grep -v "^255"

1-9.             1-9.                 1-9.                     1-9.

10-99.           10-99.               10-99.                   10-99.

100-199.         100-199.             100-199.                 100-199.

200-219.         200-249.             200-249.                 200-249.

220-223.         250-255.             250-255.                 250-255.

#ifconfig | egrep -o --color "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"

配置文件:

   文本文件

   XML文件:XML是可扩展标记语言 (Extensible Markup Language, XML)缩写

   JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

       SOAP(Simple Object Access Protocol)简单对象访问协议,是交换数据的一种协议规范,使用在计算机网络

          Web服务中.SOAP 指简易对象访问协议、SOAP 是一种通信协议、SOAP 用于应用程序之间的通信、SOAP 基于 XML

          SOAP 是一种用于发送消息的格式、SOAP 被设计用来通过因特网进行通信、SOAP 独立于平台、SOAP 独立于语言、

 

       

博客 grep egrep 文件检索工具  grep     文本处理工具之一grep命令详解

                                           grep  正则表达式  元字符

标签:字符,grep,文本处理,etc,rc,匹配,工具,任意
From: https://www.cnblogs.com/smoke520/p/18351734

相关文章

  • 软件设计:整合独立函数到工具类与通用类的权衡
    在面向对象编程中,经常会面临是否应该将独立函数整合进工具类或通用类的决策。这个问题涉及到代码组织、维护性以及可扩展性等多个方面。通过将相关的独立函数组织在一起,我们可以提高代码的可读性和可维护性,但同时也可能带来一些潜在的设计挑战。本文旨在探讨在软件设计中整......
  • OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 +
    本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。原文链接:手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤+源码)导 读    本文将手把手教你用Python和OpenCV搭建一个半自动标注工具(包含详细步骤+源码)。背景介绍    样本标......
  • 项目文档管理利器:2024年你必须了解的工具
    国内外主流的10款项目文档管理软件对比:PingCode、Worktile、Teambition、Tapd、Tower、Confluence、Notion、DropboxPaper、Quip、Basecamp。在面对项目管理的复杂性时,选择合适的文档管理工具可以显著提高效率和团队协作。许多团队在文档管理上遭遇混乱和效率低下,尤其是在处理......
  • [软件工具]随机地址生成工具极速版使用教程
    【极速版随机地址生成器】——您的便捷生活小助手!在快节奏的生活中,无论是填写问卷、注册账号还是保护个人隐私,一个安全、快速的地址生成工具都是不可或缺的。我们精心打造的“极速版随机地址生成器”,一键快速生成随机地址,支持导出TXT或者excel格式,可以方便后续处理和二次加工......
  • Arrays数组做操作工具类
    packagecom.shujia.day12;importjava.util.Arrays;/*Arrays:是java提供专门针对数组做操作的工具类,该类没有构造方法,且方法都是静态的成员方法:publicstaticStringtoString(int[]a)将任意一个数组中的所有元素以字符串的形式拼接返回......
  • Linux项目自动构建工具 make/makefile
    目录0.前言1.make/makefile是什么2.makefile的语法2.1基本语法2.2依赖关系2.3.示例:一个简单的C程序3.使用指令自动构建与清除3.1自动构建3.2自动清除3.3自动化工作流3.4扩展:更多伪目标4.make的工作原理5.使用make/makefile的优势6.小结(图像由AI生成)0.前......
  • 新新新!工具学习
    sealoshttps://sealos.run/https://blog.csdn.net/favxxx/article/details/132813886这不是宝塔嘛,确实也可以这样类比,只是宝塔更关注到单机应用,Sealos可以狭义的理解为“分布式应用的宝塔”,这样各种分布式应用可以很快运行起来。用宝塔首先你得搞台服务器,而Sealos本身就是一......
  • 使用HTML一键打包工具模拟其他浏览器 - User-Agent的起源到应用
    最近经常有一些朋友对于HTML一键打包工具中的User-Agent不太理解是什么意思,以及它到底有什么用途, 本篇文章会介绍一下User-Agent的起源,发展历程,以及它的使用场景,帮助你更好的了解和使用它User-Agent的起源与发展历程User-Agent最早出现在1990年代初期,随着NCSAMosaic......
  • 创新的HR管理工具:大型企业的10款新选择
    本篇文章介绍了以下几个工具:Moka、北森iTalentX、宏景HJSOFT、红海eHR、Bullhorn、智思云、金蝶K/3Cloud、Lever、BreezyHR、KAYANG嘉扬。在寻找适合大型企业的人力资源管理系统时,许多HR管理者都面临着如何在众多选项中做出最佳选择的难题,这不仅关系到企业的运营效率,还直接影......
  • AI编程工具FittenCode简直是懒人神器啊!
    AI编程简直太好用了,简直是懒人神器啊。自动帮我检查代码、排查错误、给出多种解决方案。快速且精准,教练级的教授知识、保姆级的贴身服务,而且免费、可以不眠不休。上一篇博文,介绍了VisualStudio如何安装AI编程工具FittenCode.今天,介绍一下FittenCode的具体应用。1.打开Fitt......