文本处理工具和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)
上一篇 2017-04-09 20:38
下一篇 2017-04-09 22:28

相关推荐

  • Linux命令帮助及history命令的使用

    1.Linux命令帮助的获取详解 在Linux中获取命令帮助时,内部命令和外部命令的获取方式是有区别的: 即 (1)内部命令:#help COMMAND             #man bash     (2)外部命令:<1> # COMMAND –help &nb…

    Linux干货 2016-08-05
  • Keepalived介绍 , 配置说明 , 及实际应用

    1. Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。 1.1 VRRP协议 VRRP全称 Virt…

    Linux干货 2016-11-04
  • Linux 环境 SSD(固态硬盘)使用指南

    原文链接:http://www.jinbuguo.com/storage/ssd_usage.html 前言 因为SSD有着诸多与传统机械式硬盘不同的特点,而且这些特点导致了SSD在实际使用中的性能和寿命与其使用方法紧密相关。所以并不是说买来一块非常牛X的SSD就万事大吉了。另一方面,SSD的性能并不像机械式硬盘那样比较稳定(浮动范围小),而是呈现出一种离散…

    Linux干货 2015-04-08
  • 马哥教育网络班22期+第9周课程练习

    week9: 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin); 分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # SHELL1="/sbin/nologin" declare -i sum1=sum2=0 for&nb…

    Linux干货 2016-10-17
  • N26-第二周博客作业

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 一) 目录管理命令 1. cd :用于切换目录。命令格式为:cd dirname 命令使用技巧: ~]# cd 进入用户主目录 ~]# cd – 进入上一次所在目录 ~]# cd / 进入根目录 ~]# cd ~ 进入用户主目录 ~]# cd .. 返回上一级…

    2017-03-01
  • N22-第一周作业

    1、描述计算机的组成及功能      计算机系统由硬件系统和软件系统组成。硬件系统(Hardware system)是计算机完成计算工作  的物质基础。软件系统(Software system):是在计算机硬件设备上运行的各种程序,是介于用户  和硬件系统之间的界面。1.1 计算机的硬件系…

    Linux干货 2016-08-22

评论列表(1条)

  • renjin
    renjin 2017-04-12 12:01

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