shell文本处理工具----grep、sed和awk

    技术2025-03-24  24

    1.grep

    grep

    grep E = egrep

    grep格式

    grep 匹配条件 处理文件

    grep root passwd         过滤root关键字

    grep ^root passwd        以root开头

    grep root$ passwd        以root结尾

    grep -i root passwd        忽略大小写

    grep -E "\<root" passwd       root字符之前不能有字符

    grep -E "root\>" passwd       root字符之后不能有字符

    grep -数字                             显示过滤行以及上面几行和下面几行

    grep -n                                  显示匹配的行所在的行号

    grep -A                                  显示过滤的行以及下面几行

    grep -B                                  显示过滤的行以及上面几行

    grep -v                                  反向过滤

     

    练习:

    在系统中列出所有能够使用的用户名称

    grep 字符数量匹配规则

    ^westos            以westos开头

    westos$            以westos结尾

    w….s                 w开头s结尾中间4个字符

    .....s                   s结尾前面的5个字符

    *                         字符出现0到任意次

    ?                        0到1次

    +                       1到任意次

    {n}                     n次

    {m,n}                 m-n次

    {0,n}                  0-n次

    {,n}                    0-n次

    {m,}                   最少m次

    (lee){2}              lee字符串出现2次

    2.sed

    命令格式

    sed 参数 命令 处理对象

    sed 参数 处理对象 -f 处理规则文件

    对字符的处理

    p                                         显示

    sed -n 5p westos                显示第五行

    sed -n 3,5p westos               显示第3到5行

    sed -ne '3p;5p' westos          显示第3和5行

    sed -ne 1,5p westos              显示1-5行

    sed -ne '5,$p' westos            显示5到最后一行

    sed -n '/^#/p' westos             显示以#开头的行

    d                                           删除

    sed 5d westos                       删除第五行

    sed '/^#/d' westos                  把#开头的行删除

    sed  '/^UUID/!d'   westos        除了UUID以外的行都删除

    sed -e '5,$d'  westos 

           

    a                                            添加

    sed -e '$ahello westos' westos

    sed -e '$a hello\westos'    westos

    sed -e '/^#/ahello westos' westos

    c                                 替换

    sed -e '/^#/c hello world' westos

    sed '5chello world' westos

    w                                把符合的行写到指定文件

    sed '/^UUID/w westosfile' westos    把westos中的UUID开头的行写入westosfile中

    i                                 插入

    sed  '5ihello westos' westos     第五行的上面插入hello westos

    r                                整合文件

    sed '5r haha' westos

    练习:

    写apache.sh       运行此脚本可以修改httpd的端口为1111

    sed字符替换

    sed '$/:/###/g' westos

    sed '$/:/###/ ' westos

    sed '1,5s/:/##/g' westos

    sed '1s/:/##/g' westos

    sed '1s/:/##/g;5s/:/##/g' westos

     sed '/daemon/,/lp/s/:/##/g' westos

    sed 's/\//##/g' westos

    sed 's@/@##@g' westos  @=/

    sed 's@/@##@g' -i  westos      把sed处理的内容保存到westos

    3.awk

    awk -F 分隔符 BEGIN{} { } END{} FILENAME

    NR      行数

    NF       列数

    FILENAME       文件名称本身

    westos              westos变量值

    "Westos"           westos字符串

    /bash$/

    /条件1 | 条件2/                条件

    /条件1/ || /条件2/             条件1或者条件2

    /条件1/&&/条件2/             条件1并条件2

    $0                                     所有的列

    $1                                      第一列

    $2                                      第二列

    $2                                       第三列

    /etc/passwd文件的第六列没有home关键词并且以bash结尾的行

    练习:

    在系统中统计能被用户使用的并且家目录不在/home中的用户个数

     

     

     

     

     

     

     

     

     

    Processed: 0.009, SQL: 9