文本处理工具和shell脚本基本编程

文本处理工具

grep 对文本进行搜索
获取我们想要的行(关键信息)

egrep 支持扩展正则表达式的grep

fgrep 快速搜索
不支持正则

 

 -v 取反  找出不包含“pattern”的行

 -i 忽略字符的大小写

 -n 显示行号

 -c 显示统计到的行数,等同于wc -l

 -o 仅显示匹配到的字符串

 -q 静默输出  只关心命令的执行结果 不关心输出结果

 -A 后几行

 -B 前几行

 -C 前后几行  查看日志 搜索关键字排查错误的时候

 -e 指定多个条件,条件是或的关系

 -w 匹配整个单词

 -E
=== egrep
支持扩展的正则表达式

 -F
=== fgrep
不支持正则表达式

例子如下:

文本处理工具和shell脚本基本编程

 

grep 正则表达式

. 单个字符

[abc] a | b | c

[^abc] abc之外的字符

[:alnum:] 数字和字符

[:alpha:] 英文大小写字符 a-z A-Z

[:lower:] 小写字母

[:upper:] 大写字母

[:space:] 专门匹配空格

* 匹配前面的字符任意次,0 到无穷

.* 任意字符出现任意次,比如说 123 456 abc

a* a字符出现任意次   aaaa aa

[[:lower:]]* 任意小写字母出现任意次

\? 匹配前面的字符出现0次或者1 

       a\? 出现0次或者1

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

   
a\+ a
至少出现1

\{n\} 前面的字符出现n

  
[0-9]\{3\} 000-999

 

\{m,n\}匹配前面的字符出现mn次,mn是一个范围

 
[0-9]\{1,3\} 0-999

\{,n\}匹配前面的字符最多出现n

  
[0-9]\{,3\}
最大匹配是999

 \{m,\}匹配前的字符至少出现m

  
[0-9]\{3,\} 000
无穷

 

  位置锚定 用来定位字符出现的位置

  ^ 锚定行首

  $ 锚定行尾

    
^$
匹配空行的

    
^[[:space:]]
行首是空白的字符

    
^[[:space:]]*$
也是 空行

    
^a 
a开头的行

    
b$ 
b结束的行

    
^a.*b$
a开头 中间任意字符 以b结尾的行

    
^a.*[[:space:]]\{3\}.*b$ a
开头跟任意字符,中间出现三次空格再跟任意字符
b结尾的行

    
^#
#开头的行

    
cat /etc/profile | grep -v “^#” | grep -v “^$”

    
cat /etc/httpd/conf/httpd.conf  |
grep -v “^#” | grep -v “^$”

 

 \b  \b 匹配词首和词尾

 \< 
\>
匹配词首和词尾

 \broot\b 
\<root\>

 

vim编辑器

 

三种模式 打开之后默认是一般模式 | 命令模式

                       插入模式 | 编辑模式

                       末行模式 | 扩展模式(extend | 命令行模式

 

 

      一般模式  i   编辑模式

            
i I a A o O  
用的比较多的是 i o O  

      编辑模式  esc 一般模式

 

      一般模式    末行模式

             : ?其中: / 用的比较多的

      末行模式  q  结束

             q 退出

             q! 强制退出,不保存修改的内容

             wq  保存退出

             x   保存退出

一般模式下 ZZ ZQ

        上下左右键移动

       
10 –>

       
10 <–

       
10
向下

       
10
向上

       
w
单词间跳转

       
10w
向下跳10个单词  

       
H
页首

       
M
页中间

       
L
页底

 

        行首行尾

         
^
跳至行首 非空白字符

         
$
跳至行尾

         
0
跳到行首

 

        
G
最后一行

        
gg
第一行 1G

 

         句子之间移动  (上  )下

         段落之间移动   {  } 向下移动

 

 

        
Ctrl+d:
向文件尾部翻半屏

        
Ctrl+u
:向文件首部翻半屏

 

        字符的删除

        
x
删除字符

        
10x
删除10个字符

 

         替换模式

         r  替换当前字符

        
进入替换模式,替换完之后按esc键退出

 

        
dd
删除光标所在当前行

        
10dd
删除10

         删除半行

           
d$
删除光标处到行尾

           
d^ d0
删除光标处到行首

           
dw de
删除一个单词

           
x
多按几次

 

           
d1G
删除光标到第一行的数据

           
dG
删除光标到最后一行的数据

            二者结合可以删除整个文件里面的内容

 

 

            删除文件全部内容 先跳到最后一行 G

                             然后执行d1G

           

            复制粘贴

           
yy  —> p

           
y$
复制光标处到行尾的

           
y0 y^
复制光标到行首的 注意空白字符和非空白字符的区别

           
ye yw
复制单个字符

  

     
      
粘贴

              p 粘贴到当前行的下一行

              P 粘贴到当前行的上面一行

 

 

            
相当于执行了x然后再执行i 进入编辑操作

            
c$
删除光标处到行尾的内容 然后进入编辑模式

            
c^ c0
删除光标处到行首的内容,删完进入编辑模式

            
cb ce cw
删除一个单词之后进入编辑模式

            
cc
删除一行之后直接进入编辑模式

 

文件查找和压缩

find:根据我们指定的内容或者条件在系统上进行实时查找

最新 最快 最精确

使用场景 我想查找某个文件名叫 server.xml /apps/data/目录下

         我想查找某个目录下文件大小超过10G的日志

 

 

 find .        
-name “baoding.log”     
-print

     查找路径      查找条件             找到之后执行的动作

 

 find . -name “baoding.log”  默认动作 标准输出,输出到当前屏幕上

 

 查找条件

     -name 可以使用通配符 比如 * [] [^]

        find . -name “????.log”

     -iname 文件名称忽略大小写

          find
. -iname “baoding.log”

  

     -inum n 根据inode来查找 (基本不用)

       find . -inum 1179826

     -samefile name  查找相同inode号的文件,其实等于查找硬链接(基本不用)

 

     -links n 根据链接数

        find . -links 2

     -regex 使用正则表达式的方法匹配文件名

        find /etc/ -regex “.*\.sh$”

 

   根据属主和属组来查找

     -user 
-group -uid -gid

     -nouser 查找没有属主的文件或者目录

     -nogroup 查找没有属组的文件或者目录

     测试方法:新建一个ash用户,然后把一个文件的属主和属组改成ash

              然后再删除ash用户

  

    根据文件类型:

        -type f 普通文件

              d 目录

              l 链接文件

              s 套接字文件

              b 块设备

              c 字符设备

              p 管道

 

 

    根据文件大小来查找

         -size + 大于多少的文件

             k M G

         -size – 小于多少的文件

             k M G

         -size   等于多少的文件

             k M G

 

    根据时间来查找

        -mtime +7 7天以前的  从第8天开始

        -mtime 7  当前时间往前推第7

        -mtime -7  当前时间往前推第7天以内

 

 

        ——10–9–8        7——5—3–2—1

        mtime +7     mtime 7 
mtime -7     
 

 

        以分钟为单位  -amin  -cmin(少用)

            -mmin +7  -7  7

 

     根据权限来查找(基本不用的)

        -perm 755 精确匹配有755权限的文件

        -perm -222 必须包含全部的222权限才可以

        -perm +222(CentOS 6)

              /222(CentOS 7)

              只要有一个比如说属主 属组或者其他人有一个拥有写权限即可

 

几种压缩工具的用法

compress

   compress file 会生产file.Z压缩文件,同时会删除源文件

   compree -c file > file.Z 将压缩结果输出到标准屏幕上,可以一个(压缩)文件,从而达到生产压缩文件

                            同时保留源文件

   compress -d 
解压缩 .Z格式结尾的压缩文件
=== uncompress

   zcat file.Z 直接查看压缩文件的内容不用先解压缩

 

 

 gzip  压缩比1–9  默认是6  压缩比越高  耗费CPU资源也多

                     文件比较小的话,使用gzip越压缩越大

                     nginx gzip on

                     gzip_min_length 1k;     超过多大的文件(1K)才会压缩

        -d 解压缩   == gunzip

        -c 将压缩或者解压缩结果输出到屏幕

 

  bzip2 

       -k 保留源文件

       -d 解压缩  == bunzip2

       -# 指定压缩比

       bzcat file

 

    xz 要取代gzip
bzip2的命令  压缩的更彻底

       -k 保留源文件

       -d 执行解压缩

       -# 指定压缩比

     xzcat 直接查看压缩文件内容

 

    zip  打包压缩(可以压缩目录)

       -r 递归压缩

        unzip 解压缩

             -p 将压缩结果输出屏幕上

 

    tar 打包工具,将多个目录打包成一个文件

        -c 打包 创建打包文件(归档)

        -f 指定打包的文件名

          -f filename 必须放在一起

        -r 将文件追加至归档文件中

        -t 不解压的情况下直接查看归档文件里面的内容

    

     常用选项:-cf  -rf -tf

 

        -x 执行解压缩

        通常和-v(显示解压缩过程) -f结合使用

 

        -C 解压到指定目录

 

shell脚本的编程

Shell脚本
 过程式 解释语言

 组成:

    变量

    命令

    控制语句(if,for,while)

 

 

首行的固定写法:

#!/bin/bash

#!/bin/sh

告诉系统执行的时候要调用什么解释器。

如果首行不写,执行的时候需要使用命令bash

 

shell脚本的写法:

   注释说明:

       #!/bin/bash

                   #

                   #Filename:BeiFen.sh

                   #Description:Test

                   #Author:Li Nan

                   #Email:xxx@126.com

                  #Revision:3.1

                   #Date:20170407

                   #Note:Test

  每一行之前最好有一个注释

  脚本名称使用.sh结尾的

  尽量避免使用中文

  # 表示注释 此行不执行

 

  脚本的执行:

   1 bash

   2 sh

   3 加执行权限

        1)相对路径

        2)绝对路径

        3)放到$PATH变量指定的目录里面,直接执行(tab)

 

  

   脚本调试执行:

   bash -n 检查语法错误,不检查拼写错误

   bash -x 显示脚本执行的时候每一个命令具体的执行结果

bash变量的种类

    本地变量(全局变量)  仅仅对当前shell生效

    环境变量    对当前shell以及其他shell都生效 export

    局部变量(私有变量)  通常用在函数里面,使用local

例子如下:

文本处理工具和shell脚本基本编程

文本处理工具和shell脚本基本编程


原创文章,作者:yaobinbin,如若转载,请注明出处:http://www.178linux.com/73027

(0)
yaobinbinyaobinbin
上一篇 2017-04-09
下一篇 2017-04-09

相关推荐

  • 马哥教育网络第21期-第十周课程练习

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 1.post加电自检,bios检测基础硬件设备 2.boot sequence:按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备;读取启动设备MBR中 的bootloader,启动GRUB,选择内核加载到内存中。 3.kernel:自身初始化:探测可识别到的…

    Linux干货 2016-11-14
  • 第一周

    #blog text 1. 描述计算机的组成及其功能。 2. 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。 3. 描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。 4. 说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、pow…

    Linux干货 2016-12-04
  • 马哥教育网络班21期+第三周课程练习

    列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登陆多次,只显示一次即可。 ~]# who|cut -d" " -f1|sort -u 2  取出最后登录当前系统的用户的相关信息。    ~]# id `last|head&nbs…

    Linux干货 2016-07-29
  • 文件查找(find)

                                  …

    2017-04-11
  • 正则表达式及其用法

    正则表达式及其用法 1.   什么是正则表达式 正则表达式是Global search REgular expression and Print out the line的缩写。是一类用字符所书写的模式,其中许多字符并不表示其字面意义,而是表达控制或通配等功能。 在Linux中,用正则表达式搜索文本的常用命令: grep: 使用基本正则表…

    Linux干货 2015-09-14
  • N23_第1周博客作业

    1、描述计算机的组成及其功能。     根据冯·诺依曼体系计算机有中央处理器、主存储器、输入/输出三个子系统组成。 1.中央处理器 CPU(Central Processing Unit)用于数据运算。CPU有控制单元、算数逻辑单元、寄存器组组成。 (1)控制单元:控制各个子系统操作 (2)算数逻辑单元:对数据进行逻辑、移位和算数运算 逻…

    Linux干货 2016-09-19

评论列表(1条)

  • renjin
    renjin 2017-04-12 12:01

    主要介绍了vim、 find命令、grep命令的用法及正则表达式方面的内容,内容总结的很详细,要稍微注意一下排版,继续努力!