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

相关推荐

  • 网卡名称更改

    网卡是计算机进行网络通信的必须的设备。在CentOS6及其更早的系统中,网卡设备在系统中的名称命名为eth#(#为0,1,2…之类的数字)。在内核版本为3.0.0及其以后的Linux发行版中,网卡设备在系统中名称变得很长,变得不好识别以及不利于管理。为了更好的管理,我们将新的网络设备命名改为传统的命名。 网卡名称更改 在CentOS系统中操作 在RHEL7系…

    Linux干货 2016-11-23
  • 初识文件系统和软硬链接

    什么是文件系统?         磁盘分区以后必须设置磁盘的文件系统才可以正式使用,文件系统定义了文件存储的类型,也就是这个文件要按照怎样的方式存入磁盘分区。         linux中文件系统的类…

    2017-07-20
  • rpm 详解

     rpm 包详解 程序包的命名格式:name-VERSION.tar.gz 拆包:主包和分包 主包:name-VERSION-release.arch.rpm 支包:name-function-VERSION-release.arch.rpm   注意:程序包之间有时会存在依赖关系,依靠前端工具解决依赖关系 yum Rhel系列系统上的r…

    Linux干货 2017-08-17
  • 网络管理3

    一、知识整理 1、跨网络通信:路由 路由的分类:主机路由;网络路由;默认路由。 将主机接入网络,需要配置网络相关设置。一般包括如下内容:主机名;IP/MASK;路由:默认网关;DNS服务器:主、次、第三DNS服务器。 2、网络配置文件:IP、MASK、GW、DNS相关配置文件 /etc/sysconfig/network-scripts/ifcfg-IFAC…

    Linux干货 2016-09-10
  • Linux下编译内核

                           Linux下编译内核 内核编译: 编译内核就是把内核的相关文件重新生成。   内核编译前期准备: Linux kernel下载网址:https://www.kernel.or…

    系统运维 2016-09-21

评论列表(1条)

  • renjin
    renjin 2017-04-12 12:01

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