zoukankan      html  css  js  c++  java
  • sed grep awk用法

    grep

    grep 是linux 中最常用的“文本处理工具之一” 与sed awk 合称为linux中的三剑客!

    grep 就像你在windows中打开txt文件,使用快捷键“Ctrl+F” 在文本中查找某个字符串一样,可以把grep 理解为字符查找工具

    grep 的全程为Global search Regular Expression  and Print out the line 为全局搜索的意思

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    -i:在搜索的时候忽略大小写
    [root@localhost ~]# cat /etc/passwd|grep -i "SSH"
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
     
    -n: 显示结果所在行号
    [root@localhost ~]# cat /etc/passwd|grep -ni "SSH"
    17:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
     
    -c:统计匹配到的行数
    [root@localhost ~]# cat /etc/passwd|grep  "root"
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@localhost ~]# cat /etc/passwd|grep -c "root"
    2
     
    -w:匹配单个单词,如果字符串中包含这个单词,则不匹配
    [root@localhost ~]# cat /etc/passwd.bak|grep -w "root"
    root:x:0:0:root:/root:/bin/bash
    rootroo:x:0:0:root:/root:/bin/bash #不会显示rootroo的
     
    -e:实现多个选项的匹配。逻辑或or的关系
    ==egrep
    ==grep -E
    [root@localhost ~]# cat /etc/passwd.bak|egrep -w "root|sshd"
    root:x:0:0:root:/root:/bin/bash
    rootroo:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
     
    -q: 静默模式,不输出任何信息 判断:echo $?
    [root@localhost ~]# cat /etc/passwd.bak|grep -q "root"
     
    -v:输出不带关键字的行(反向查询,反向匹配)
    [root@localhost ~]# cat /etc/passwd.bak|grep -v "root"
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin

     sed

    流编辑器,主要用来过滤和替换文本内容

    工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并清空模式。然后再将下一行读入模式空间进行处理输出,以此类推,直至最后一行。

    用法:

    sed [选项] ‘命令’ file_name

    选项:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    参数说明:
     
        -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
        -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
        -h或--help 显示帮助。
        -n或--quiet或--silent 仅显示script处理后的结果。
        -V或--version 显示版本信息。
     
    动作说明:
     
        a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
        c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
        d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
        i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
        p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
        s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

     awk

    awk 是一个优良的文本处理工具。(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)

    语法:awk 'pattern {action}'  file_name

    其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令

    1
    [root@localhost ~]# awk '{print $0}' /etc/passwd<br>root:x:0:0:root:/root:/bin/bash<br>bin:x:1:1:bin:/bin:/sbin/nologin<br>daemon:x:2:2:daemon:/sbin:/sbin/nologin<br><br>

     print 是打印命令  $0 是代表当前行

    awk 会根据空格和制表符,将每一行分成若干字段,一次用$1,$2,$3代表第一个字段,第二个字段,第三个字段

    -F 指定分隔符为冒号

    1
    2
    3
    4
    5
    6
    7
    8
    [root@localhost ~]# awk -F ':' '{print $1,$2}' /etc/passwd
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown

     awk 常用变量

    NF:表示最后一个字段

    1
    2
    3
    4
    5
    6
    [root@localhost ~]# awk -F ':' '{print $NF}' /etc/passwd
    /bin/bash
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin
    /sbin/nologin

     $(NF-1):表示倒数第二个字段

    1
    2
    3
    4
    5
    6
    [root@localhost ~]# awk -F ':' '{print $(NF-1)}' /etc/passwd
    /root
    /bin
    /sbin
    /var/adm
    /var/spool/lpd

     NR:表示当前处理的是第几行

     输出第二行

    1
    2
    [root@localhost ~]# awk -F ":" 'NR==2 {print}' /etc/passwd
    bin:x:1:1:bin:/bin:/sbin/nologin

    输出第三行以后的行

    1
    2
    3
    4
    5
    [root@localhost ~]# awk -F ':' 'NR>3 {print}' /etc/passwd
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

     awk 内置函数

    toupper()用于将字符转为大写【t^ber】

    1
    2
    3
    4
    5
    6
    [root@localhost ~]# awk -F ':' '{print toupper($1)}' /etc/passwd
    ROOT
    BIN
    DAEMON
    ADM
    LP

     tolower()用于将字符串转为小写

    1
    2
    3
    4
    5
    6
    [root@localhost ~]# awk -F ':' '{print toupper($1)}' /etc/passwd >/tmp/aa.txt
    [root@localhost ~]# awk '{print tolower($1)}' /tmp/aa.txt
    root
    bin
    daemon
    adm

     awk 允许指定输出条件,只输出符合条件的行

    打印包含root的行

    1
    2
    3
    [root@localhost ~]# awk '/root/ {print}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin

     输出第一个字段等于指定值的行

    1
    2
    [root@localhost ~]# awk -F ':' '$1=="root" {print}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash

     awk if else语句

    假如$1==root 打印第一个字段,否则打印第二个字段

    1
    2
    3
    4
    5
    6
    [root@localhost ~]# awk -F : '{if ($1=="root") print $1;else print $2}' /etc/passwd
    root
    x
    x
    x
    x

     awk 高级用法BEGIN END

    任何在BEGIN之后列出的操作(在{}内)将在Unix awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。

    因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果

    数字求和

    1
    seq 10|awk '{sum+=$0} END {print sum}'
    1
    2
    3
    4
    5
    6
    7
    8
    9
    例:累计销售文件xs中的销售金额(假设销售金额在记录的第三字段):
     
    cat sx
     
    一:50件:200.00
     
    二:60件:300.00
     
    三:70件:400.00
    1
    2
    3
    4
    5
    6
    7
    8
    [root@localhost ~]# awk 'BEGIN {FS=":";print "统计销售金额";total=0} {print $3;total=total+$3;} END {printf "销售金额总计: %.2f ",total}' sx
    统计销售金额
    200.00
     
    300.00
     
    400.00
    销售金额总计: 900.00
  • 相关阅读:
    重新想象 Windows 8 Store Apps (15) 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState, VisualStateManager
    重新想象 Windows 8 Store Apps (12) 控件之 GridView 特性: 拖动项, 项尺寸可变, 分组显示
    返璞归真 asp.net mvc (10) asp.net mvc 4.0 新特性之 Web API
    与众不同 windows phone (29) Communication(通信)之与 OData 服务通信
    与众不同 windows phone (33) Communication(通信)之源特定组播 SSM(Source Specific Multicast)
    与众不同 windows phone (27) Feature(特性)之搜索的可扩展性, 程序的生命周期和页面的生命周期, 页面导航, 系统状态栏
    与众不同 windows phone (30) Communication(通信)之基于 Socket TCP 开发一个多人聊天室
    返璞归真 asp.net mvc (12) asp.net mvc 4.0 新特性之移动特性
    重新想象 Windows 8 Store Apps (2) 控件之按钮控件: Button, HyperlinkButton, RepeatButton, ToggleButton, RadioButton, CheckBox, ToggleSwitch
    重新想象 Windows 8 Store Apps (10) 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom
  • 原文地址:https://www.cnblogs.com/tyk3201/p/11970773.html
Copyright © 2011-2022 走看看