zoukankan      html  css  js  c++  java
  • shell--grep命令+正则表达式+基本语法

    什么是正则

    正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。

    在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,可以解释正则的有三种文本处理工具/命令:grep、sed、awk,今天我们先来熟悉grep。

    Python也用到正则表达式,与此正则稍有区别,此处讲正则,可以加深我们的理解。

    ---------------------------------------------------------------------------------

    grep

    参数

    -n  :显示行号
    -o  :只显示匹配的内容
    -q  :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

    -l  :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc 
    -A  :如果匹配成功,则将匹配行及其后n行一起打印出来
    -B  :如果匹配成功,则将匹配行及其前n行一起打印出来
    -C  :如果匹配成功,则将匹配行及其前后n行一起打印出来
    --color
    -c  :如果匹配成功,则将匹配到的行数打印出来
    -E  :等于egrep,扩展
    -i  :忽略大小写

    -v  :取反,不匹配
    -w:匹配单词

    下面我们可以做些练习:

     

     

     

     

    -------------------------

    正则介绍

    ^ 行首
    $ 行尾
    . 除了换行符以外的任意单个字符
    * 前导字符的零个或多个
    .* 所有字符
    [] 字符组内的任一字符
    [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
    ^[^] 非字符组内的字符开头的行
    [a-z] 小写字母
    [A-Z] 大写字母
    [a-Z] 小写和大写字母
    [0-9] 数字
    < 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
    > 单词尾

    ? 前导字符零个或一个
    + 前导字符一个或多个

    x{m} x出现m次
    x{m,} x出现m次至多次(至少m次)
    x{m,n} x出现m次至n次

    abc|def 表示abc或def
    a(bc|de)f 表示abcf 或 adef

    扩展正则:grep -E 或 egrep

     下面是一些练习:

     

     

     

     

     

     

     

     

     ------------------------------------------------------------

    基本语法

    什么是shell script

    将OS命令堆积到可执行的文件里,由上至下的顺序执行文本里的OS命令 就是脚本了.
    再加上些智能(条件/流控)控制,就变成了智能化脚本了.

    变量

    part1 为何要有变量

    程序的运行就是一些列状态的变量->用变量值的变化去表示

    part2 变量命名规则

    以字母或下划线开头,剩下的部分可以是:字母、数字、下划线.

    最好遵循下述规范:

    1.以字母开头
    2.使用中划线或者下划线做单词的连接
    3.同类型的用数字区分
    4.对于文件最好加上拓展名
    例如: sql_bak.tar.gz,log_bak.tar.bz2 

    part3 系统变量

    set 和 env区别
    set:显示所有变量
    env:环境变量

    part4 变量赋值

    VARNAME=VALUE
    echo $VARNAME
    删除变量 unset VARNAME

    part5 常用系统变量

    PATH
    PWD
    LANG
    HOME
    HISTSIZE
    PS1
    IFS
    域分隔符 是空格,换行,TAB键的合集

     

    part6 全局变量与局部变量

    [root@MiWiFi-R3-srv ~]# gender='male' #在爹这个位置定义一个局部变量gender
    [root@MiWiFi-R3-srv ~]# export money=1000 #在爹这个位置定义一个全局变量money
    [root@MiWiFi-R3-srv ~]#
    [root@MiWiFi-R3-srv ~]#
    [root@MiWiFi-R3-srv ~]# bash #切换到子bash
    [root@MiWiFi-R3-srv ~]# echo $gender #在儿子这里看它爹的局部变量gender,结果为空->看不到

    [root@MiWiFi-R3-srv ~]# echo $money #在儿子这里看它爹的全局变量money,可以看到
    1000
    [root@MiWiFi-R3-srv ~]#
    [root@MiWiFi-R3-srv ~]# export hobby='piao' #在儿子这里定义一个全局变量hobby
    [root@MiWiFi-R3-srv ~]# exit #退出,进入爹的bash环境
    exit
    [root@MiWiFi-R3-srv ~]# echo $hobby #爹是看不到儿子的export的,儿子的儿子可以看到

    [root@MiWiFi-R3-srv ~]#

    part6 定义变量名的边界

    [root@MiWiFi-R3-srv ~]# rest_mem=20
    [root@MiWiFi-R3-srv ~]# echo ${rest_mem}%
    20%

    part 7 数据类型

    bash中的变量无须声明,拿来就用.默认的变量都会是字符类型,还可以有数字类型,普通的脚本,这两种类型够用了

    运算符

    part1 算术运算符

    +

    -

    *

    /

    %

    part2 关系操作

    与(())连用

    <

    >

    <=

    >=

    ==

    !=

    &&

    ||

    test命令相关,[]可以达到一样的效果
    [root@MiWiFi-R3-srv ~]# x=1
    [root@MiWiFi-R3-srv ~]# [ $x -gt 1 ]
    [root@MiWiFi-R3-srv ~]# echo $?
    0

  • 相关阅读:
    zTree 优秀的jquery树插件
    The underlying provider failed on open 问题解决
    HTML 5 <input> list 属性
    C#拖曳控件加载,bll报错问题
    把VS2010的智能代码提示和注解从英文变成中文
    progressBar的使用
    C++内存读写例子
    bash 管理小脚本
    KVM虚拟机配置笔记
    Ettercap 实施中间人攻击
  • 原文地址:https://www.cnblogs.com/metianzing/p/6938473.html
Copyright © 2011-2022 走看看