zoukankan      html  css  js  c++  java
  • SHELL用法八(Grep语句)

    1、SHELL编程Grep语句案例实战

    1)Find是Linux操作系统文件和目录的路径检索、查询工具,而Grep是Linux系统下文本文件内容检索或者匹配工具,Grep称为全局正则表达式检索工具,在企业中被广泛的采用。
    2)Grep工具的语法格式:
    grep -option(参数) ‘word’(关键词) file(文本文件);
     Option参数:
    -a(文本方式)
    -c(统计)
    -i(忽略大小写)
    -n(行号)
    -v(反选)
    -o(仅匹配)
    -w(词组)
    -A(匹配之后)
    -B(匹配之前)
    -C(匹配前后)
    3)Grep企业案例实战一,查找/etc/passwd文件中是否存在www用户信息,命令操作如下:
    grep root /etc/passwd
    grep "root" /etc/passwd
    grep -w "^root" /etc/passwd
    grep -i "root" /etc/passwd
    4)Grep企业案例实战二,ifconfig看到网卡信息,只查看IP地址所在行信息,命令操作如下:
    ifconfig|grep netmask
    ifconfig|grep -w inet
    ifconfig|grep -w 255
    ifconfig|grep -E "172|127"ifconfig|grep -E "([0-9]{1,3}.){3}[0-9]{1,3}"
    #创建三个文件,并且往文件中分别写入不同的代码;
    for i in `seq 1 3`;do touch jf$i.txt;echo jfedu jf$i >jf$i.txt;echo cat
    jf$i.txt;cat jf$i.txt;echo ----------;done
    5)通配符类型详解:
    *
    0个或者多个字符、数字;
    ?
    匹配任意一个字符;
    #
    表示注解;
    |
    管道符号;
    ;
    多个命令连续执行;
    &
    后台运行指令;
    !
    逻辑运算非;
    [ ]
    内容范围,匹配括号中内容;
    { }
    命令块,多个命令匹配。
    6)正则表达式详解:
    *
    前一个字符匹配0次或多次;
    .
    匹配除了换行符以外任意一个字符;.*
    代表任意字符;
    ^
    匹配行首,即以某个字符开头;
    $
    匹配行尾,即以某个字符结尾;
    (..)
    标记匹配字符;
    []
    匹配中括号里的任意指定字符,但只匹配一个字符;
    [^]
    匹配除中括号以外的任意一个字符;
    
    转义符,取消特殊含义;
    <
    锚定单词的开始;
    >
    锚定单词的结束;
    {n}
    匹配字符出现n次;
    {n,}
    匹配字符出现大于等于n次;
    {n,m}
    匹配字符至少出现n次,最多出现m次;
    w
    匹配文字和数字字符,不匹配符号;
    W
    w的反置形式,匹配一个或多个非单词字符,匹配
    符号;
    
    单词锁定符;
    s
    匹配任何空白字符;
    d
    匹配一个数字字符,等价于[0-9]。
    7)常用GREP工具企业演练案列:
    grep -c "test"
    jfedu.txt 统计test字符总行数;
    grep -i "TEST"
    jfedu.txt 不区分大小写查找TEST所有的行;
    grep -n "test"
    jfedu.txt 打印test的行及行号;grep -v "test"
    jfedu.txt 不打印test的行;
    grep "test[53]"
    jfedu.txt 以字符test开头,接5或者3的行;
    grep "^[^test]"
    jfedu.txt 显示输出行首不是test的行;
    grep "[Mm]ay"
    jfedu.txt
    匹配M或m开头的行;
    grep "K…D"
    jfedu.txt
    匹配K,三个任意字符,紧接D的行;
    grep "[A-Z][9]D"
    jfedu.txt
    匹配大写字母,紧跟9D的字符行;
    grep "T{2,}"
    jfedu.txt 打印字符T字符连续出现2次以上的行;
    grep "T{4,6}"
    jfedu.txt 打印字符T字符连续出现4次及6次的行;
    grep -n "^$"
    jfedu.txt
    打印空行的所在的行号;
    grep -vE "#|^$"
    jfedu.txt
    不匹配文件中的#和空行;
    grep
    --color -ra -E
    "db|config|sql" * 匹配包含db或者config或者
    sql的文件;
    grep
    --color -E "<([0-9]{1,3}.){3}([0-9]{1,3})>"
    jfedu.txt 匹配
    IPV4地址
    2、SHELL编程Awk语句案例实战
    Awk主要是用于对文本文件进行处理,通常是逐行处理,其语法参数格式为,AWK常用参数、变量、函数详解如下:
    awk  'pattern  + {action}'   file
    (1) AWK基本语法参数详解:
    单引号' '是为了和shell命令区分开;
    大括号{ }表示一个命令分组;
    pattern是一个过滤器,表示匹配pattern条件的行才进行Action处理; action是处理动作,常见动作为Print;
    使用#作为注释,pattern和action可以只有其一,但不能两者都没有。
    (2) AWK内置变量详解:
    FS 分隔符,默认是空格;
    OFS 输出分隔符;
    NR 当前行数,从1开始;
    NF 当前记录字段个数;
    $0 当前记录;
    $1~$n 当前记录第n个字段(列)。
    (3) AWK内置函数详解:
    gsub(r,s):在$0中用s代替r;
    index(s,t):返回s中t的第一个位置;
    length(s):s的长度;
    match(s,r):s是否匹配r;
    split(s,a,fs):在fs上将s分成序列a;
    substr(s,p):返回s从p开始的子串。
    (4) AWK常用操作符,运算符及判断符:
    ++ --
    增加与减少( 前置或后置);
    ^ **
    指数( 右结合性);
    ! + -
    非、一元(unary) 加号、一元减号;
    + - * / %
    加、减、乘、除、余数;
    < <= == != > >=
    数字比较; &&
    逻辑and;
    ||
    逻辑or;
    = += -= *= /= %= ^= **=
    赋值。
    (5) AWK与流程控制语句:
    if(condition) { } else { };
    while { };
    do{ }while(condition);
    for(init;condition;step){ };
    break/continue。
    常用AWK工具企业演练案列:
    (1) AWK打印硬盘设备名称,默认以空格为分割:
    df  -h|awk '{print $1}'
    (2) AWK以空格、冒号、 、分号为分割:
    awk -F '[ :	;]' '{print $1}'   jfedu.txt
    (3) AWK以冒号分割,打印第一列,同时将内容追加到/tmp/awk.log下:
    awk -F: '{print $1 >>"/tmp/awk.log"}' jfedu.txt
    (4) 打印jfedu.txt文件中的第3行至第5行,NR表示打印行,$0表示文本所有域:
    awk 'NR==3,NR==5 {print}'   jfedu.txt
    awk 'NR==3,NR==5 {print $0}'   jfedu.txt
    5) 打印jfedu.txt文件中的第3行至第5行的第一列与最后一列:
    awk 'NR==3,NR==5 {print $1,$NF}'   jfedu.txt
    6) 打印jfedu.txt文件中,长度大于80的行号:
    awk  'length($0)>80 {print NR}'     jfedu.txt
    7) AWK引用Shell变量,使用-v或者双引号+单引号即可:
    awk -v STR=hello '{print STR,$NF}'     jfedu.txt
    STR="hello";echo| awk '{print "'${STR}'";}'

     8) AWK以冒号切割,打印第一列同时只显示前5行:

    cat /etc/passwd|head -5|awk -F:   '{print $1}'
    awk -F: 'NR>=1&&NR<=5 {print $1}' /etc/passwd
    9) Awk指定文件jfedu.txt第一列的总和:
    cat jfedu.txt |awk '{sum+=$1}END{print sum}'
    10) AWK NR行号除以2余数为0则跳过该行,继续执行下一行,打印在屏幕:
    awk -F: 'NR%2==0 {next} {print NR,$1}' /etc/passwd
    11) AWK添加自定义字符:
    ifconfig eth0|grep "Bcast"|awk '{print "ip_"$2}'

     12) AWK与if组合实战,判断数字比较:

    echo 3 2 1 | awk '{ if(($1>$2)||($1>$3)) { print $2} else {print $1} }'

     13) AWK与数组组合实战,统计passwd文件用户数:

    awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i =
    0; i < NR; i++) print i, name[i]}' /etc/passwd

     14) awk分析Nginx访问日志的状态码404、502等错误信息页面,统计次数大于20的IP地址。

    awk '{if ($9~/502|499|500|503|404/) print $1,$9}' access.log|sort|uniq –c|sort –nr | awk '{if($1>20) print $2}'

     15) Awk统计服务器状态连接数:

    netstat -an | awk '/tcp/ {s[$NF]++} END {for(a in s) {print a,s[a]}}'
    netstat -an | awk '/tcp/ {print $NF}' | sort | uniq -c
  • 相关阅读:
    STM32 F4 DAC DMA Waveform Generator
    STM32 F4 General-purpose Timers for Periodic Interrupts
    Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
    Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
    查看SQL Server服务运行帐户和SQL Server的所有注册表项
    Pycharm使用技巧(转载)
    SQL Server 2014内存优化表的使用场景
    Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕获sys.exit()调用 optparse argparse
    Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
    Python第六天 类型转换
  • 原文地址:https://www.cnblogs.com/nshgo/p/12157745.html
Copyright © 2011-2022 走看看