文本处理工具和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

相关推荐

  • 文件查找命令之find

    文件查找命令一共有两种,locate 和find ,那么他们在用法和功能上面有什么区别呢?     locate:查找速度快,模糊查找,遍历整个文件系统的目录到数据库中,然后在去数据库中查找,依赖于事先创建好的索引库,该数据库属于系统自动创建,定期自动更新,也可手动跟新,更新命令updatedb,更新数据库需要遍历整个根文件系统…

    Linux干货 2016-08-16
  • bash脚本变量的使用

    bash脚本的变量使用详解 变量的类型包括整数、字符串和数组,但在bash脚本编程中不需要指定类型就可以直接赋值,默认均为字符型,其参与运算会自动进行隐式类型转换。 变量的赋值方式为:name='value',其中“=”两边一定不能有空格,如果变量值中包含有空格则需要使用引号引起来,需要注意的是强引用和弱引用的区分。此外变量的赋值也可以引…

    Linux干货 2016-08-15
  • N21_第09周_shell脚本

    作业题目: 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; 预置条件: [root@zhouyong148 N21_09]# cat /etc/passwd root:x:0:0:root:/root:/b…

    Linux干货 2016-11-14
  • python第二周

    #python数据结构(list) ## 分类 数值型:int、float、complex、bool 序列对象:字符串 str   列表  list   元组  tuple 键值对: 集合 set   字典 dict   ## 数字的处理函数 math.e  math.pi: 自如常数和π round():  四舍六入五去偶 floor():  取…

    Linux干货 2017-09-23
  • 20本最好的Linux免费书籍

    前些天Neo推荐了一个网站有《超过100本的linux免费书籍》,这里,我也向大家推荐20本最好的Linux免费书籍,当然,也是英文版的。 1. Ubuntu Pocket Guide and Reference 一本介绍关于Ubuntu 8.04和8.10的使用书。 Website www.ubuntupocketguide.com Author Keir…

    Linux干货 2015-04-01
  • Linux文本处理工具和正则表达式

    概述:     Linux核心哲学思想中很重硬件要的一条内容就是一切皆文件,在Linux系统上,无论硬件、软件、配置文件等等一切,都以文件形式呈现出来。一般文件类型有:普通文件、目录文件、链接文件、管道文件、套接字文件、字符设备文件、块设备文件等。而普通文件里面又有一些文本文件、二进制文件等细分化的文件类型,而我们日常…

    Linux干货 2016-08-07

评论列表(1条)

  • renjin
    renjin 2017-04-12 12:01

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