文本处理工具和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\}匹配前面的字符出现m到n次,m,n是一个范围

 
[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  替换当前字符

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

 

        
dd
删除光标所在当前行

        
10dd
删除10行

         删除半行

           
d$
删除光标处到行尾

           
d^ d0
删除光标处到行首

           
dw de
删除一个单词

           
x
多按几次

 

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

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

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

 

 

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

                             然后执行d1G

           

            复制粘贴

           
yy  —> p

           
y$
复制光标处到行尾的

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

           
ye yw
复制单个字符

  

     
      
粘贴

              p 粘贴到当前行的下一行

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

 

 

            
c 
相当于执行了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 20:38
下一篇 2017-04-09 22:28

相关推荐

  • MairaDB之基于openssl的主从复制

    一、配置openssl   1、   在master server(node0)上根CA的搭建(及生成自签名证书) [root@node0 ~]# cd /etc/pki/CA/ [root@node0 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) Gen…

    2014-10-03
  • LVM逻辑卷管理器

    Logical Volume Manager     LVM(逻辑卷管理)是Linux环境下对磁盘分区进行管理的一种机制。     普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,     某个分区空间耗尽时,解决的方法通常是使…

    Linux干货 2016-08-29
  • 马哥教育网络班21期-第六周课程练习

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;  # :%s@^[[:space:]]\+@#&@g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符; &nb…

    Linux干货 2016-08-15
  • Linux初识

    一 .计算机的关键部位 cpu(运算器 控制器):正给计算机的中枢神经,对程序控制信息的处理和 对数据的运算 存储器:存储程序数据和各种信息指令 Input:起到将各个外部信息传递给计算机的作用 output:将计算机内部的各个信号数据及计算结果输出 二 .一些主流Linux发行版简介 linux发行版:linux只是一个操作系统,搭配其它软件发行的系统就是…

    Linux干货 2016-10-30
  • 文件查看及查找命令

    cat  查看一个文件   -E: 显示行结束符$   -n: 对显示出的每一行进行编号   -A:显示所有控制符   -b:非空行编号   -s:压缩连续的空行成一行   -T:显示制表符 常用:cat -An /et…

    Linux干货 2017-04-08
  • linux入门第二课

    **linux入门基础** linux 命令类别 内部命令和外部命令 首先我们可以用echo $SHELL 来查询shell 里面会显示我们当前在用的shell 上图是echo $SHELL 也可以用cat /etc/shells来查询系统里面的shell bash其实是一个文件是一个程序 存在于 /bin/bash 目录,这是真是存在的文件,是一个可以执行…

    Linux干货 2017-05-20

评论列表(1条)

  • renjin
    renjin 2017-04-12 12:01

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