grep awk sed 过滤命令

    科技2022-08-07  117

    grep 简介

    grep 是linux 中最常用的“文本处理工具之一与sed awk 合称为linux中的三剑客!grep 就像你在windows中打开txt文件,使用快捷键“Ctrl+F” 在文本中查找某个字符串一样,可以把grep 理解为字符查找工具grep 的全称为Global search Regular Expression and Print out the line 为全局搜索的意思

    grep 基本用法

    # grep [选项] 正则表达式 [目标文件] grep [OPTIONS] PATTERN [FILE...] # grep [选项] -e 正则表表达式 或 -f 包含正则表表?

    常用参数

    -v:反向查找,显示没有匹配模式的行

    -n:显示匹配结果所在行号

    -i: 在搜索的时候忽略大小写

    -o:只显示符合条件的字符串

    -e:实现多个选项的匹配,逻辑or关系

    -E:使用扩展正则表达式,在使用 “-E” 选项时,相当于使用 egrep

    -w:精确匹配关键字

    -c:统计匹配到的行数,注意,是匹配到的总行数

    -q: 静默模式,不输出任何信息

    -l: 不显示输出的匹配结果,仅显示匹配的文件名

    -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。

    b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。

    sed 简介

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

    工作原理:

    sed是流编辑器,不允许用户与它进行交互操作.sed是以行为单位处理文本内容的.每一次读取一行到内存中,即称之为模式空间(pattern space)默认不修改原文件,如果需要修改需加-i参数sed有模式空间及保持空间(hold sapce),默认打印模式空间中的内容到标准输出sed读取每行的时候会将内容保存至内存中支持正则和扩展正则表达式,除-y选项

    sed 基本用法

    sed [选项] '定址和命令' 处理的文件

    常用的选项

    -i:将修改直接作用-n:取消默认输出

    常用的参数

    p:打印

    d:删除

    s:替换(字符串被替换) g:全局模式,所有匹配的字符串都被替换(不加g默认只替换每行匹配的第一个)

    y:变换字符(一一对应)

    i:插入(匹配行前)

    a:追加(匹配行后)

    c:修改(匹配到的整行被修改)

    r:从文件读入

    w:写入文件

    q:找到第一个匹配就退出

    awk 简介

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

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

    awk基本用法

    -F 指定分隔符为冒号

    语法格式:

    awk -F '分隔符' '/模式/{操作}' 文件名

    awk内置变量

    属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入字段分隔符 默认是空格 NF 当前记录中的字段个数,就是有多少列 NR 已经读出的记录数,就是行号,从1开始 RS 输入的记录他隔符默 认为换行符 OFS 输出字段分隔符 默认也是空格 ORS 输出的记录分隔符,默认为换行符 ARGC 命令行参数个数 ARGV 命令行参数数组 FILENAME 当前输入文件的名字 IGNORECASE 如果为真,则进行忽略大小写的匹配 ARGIND 当前被处理文件的ARGV标志符 CONVFMT 数字转换格式 %.6g ENVIRON UNIX环境变量 ERRNO UNIX系统错误消息 FIELDWIDTHS 输入字段宽度的空白分隔字符串 FNR 当前记录数 OFMT 数字的输出格式 %.6g RSTART 被匹配函数匹配的字符串首 RLENGTH 被匹配函数匹配的字符串长度

    awk常用变量

    NF:表示最后一个字段 [root@localhost ~]# awk -F ':' '{print $NF}' /etc/passwd /bin/bash /sbin/nologin /sbin/nologin /sbin/nologin /sbin/nologin $(NF-1):表示倒数第二个字段 [root@localhost ~]# awk -F ':' '{print $(NF-1)}' /etc/passwd /root /bin /sbin /var/adm /var/spool/lpd NR:表示当前处理的是第几行
    输出第二行
    [root@localhost ~]# awk -F ":" 'NR==2 {print}' /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin
    三行以后
    [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】 [root@localhost ~]# awk -F ':' '{print toupper($1)}' /etc/passwd ROOT BIN DAEMON ADM LP tolower()用于将字符串转为小写 [root@localhost ~]# awk '{print tolower($1)}' /tmp/aa.txt root bin daemon adm

    awk if else语句

    假如$1==root 打印第一个字段,否则打印第二个字段 root@localhost ~]# awk -F : '{if ($1=="root") print $1;else print $2}' /etc/passwd root x x x x

    awk 高级用法BEGIN END

    awk ' BEGIN { actions } /pattern/ { actions } /pattern/ { actions } ………. END { actions } ' filenames BEGIN 模式:是指 awk 将在读取任何输入行之前立即执行 BEGIN 中指定的动作。END 模式:是指 awk 将在它正式退出前执行 END 中指定的动作
    Processed: 0.016, SQL: 9