bash之sed与awk初步

bash编程之sed:
    grep, sed, awk

sed: Stream EDitor,行编辑器

sed /pattern/
    p:print     sed先读入到模式空间再看是否匹配 默认显示模式空间 故p命令匹配模式的内容都显示了两次

    sed [options] "script" FILE1 ...

    例子:sed -n "/^#/p" /etc/fstab

    选项:
        -n: 静默模式,即不输出模式空间中的内容;
        -e: 指定在一个sed命令中使用多个script,格式为-e 'script1' -e 'script2' ...
        -i: 直接修改原文件;
        -r: 支持使用扩展正则表达式元字符;
        -f /path/to/sed_script: 从文件中读取处理脚本,并执行;   sed脚本内容不写#! /bin/bash  内容也无需加引号

    sed地址定界:
        start_line,end_line: 例如1,7p;9,10p   命令间分号隔开 也可以-e分开
        start_line,/pattern/: 例如3,/^#/   到模式第一次匹配为止
        /pattern/: 仅匹配被模式到的行;

    基本正则表达式:
        .
        []:
            [0-9], [[:digit:]]
            [a-z], [[:lower:]]    grep时 a-z不区分大小写需用upper lower 区分  sed区分
            [A-Z], [[:upper:]]
            [a-zA-Z], [[:alpha:]]
            [a-zA-Z0-9], [[:alnum:]]
            [[:space:]], [[:punct:]]
        [^]
        \{m,n\}
        \{m\}  m次 
        \{m,\}  至少m次
        \{0,n\}  至多n次
        *
        \?

        ^
        $

        \<, \b
        \>, \b

        \(\), \1, \2, ... 分组及引用

    扩展正则表达式:
        .
        []:
            [0-9], [[:digit:]]
            [a-z], [[:lower:]]
            [A-Z], [[:upper:]]
            [a-zA-Z], [[:alpha:]]
            [a-zA-Z0-9], [[:alnum:]]
            [[:space:]], [[:punct:]]
        [^]
        {m,n}    不用加反斜线
        *             
        ?               
        +    1次或多次
        |       或者

        (), \1, \2      分组

        ^
        $

        \<, \b
        \>, \b               
       

 

    sed的常用编辑命令:
        p: 打印
        d: 删除      删除非#行 与p打印#开头的行效果同
        a \text:在符合条件的行后面添加指定的内容;在的添加的内容中间使用“\n”能够完成多行附加;
        i \text:在符合条件的行前面添加指定的内容;在的添加的内容中间使用“\n”能够完成多行附加;
        c \text: 将符合条件的行替换为指定的文本;
        r /path/to/somefile: 在符合条件的位置读入指定的文件;
        w /path/to/somefile: 将符合条件的行保存至指定文件中;
        =: 显示匹配到的行的源文件行号;  行号默认换行显示

        s@要查找的内容@替换为的内容@:
            要查找的内容:可以使用模式
            替换为的内容:不可以使用模式,但可以引用, &

        标志位:
            i: 忽略大小写
            g:全局替换   一行中匹配多次均替换


t, T, n, N, x, h, H, g, G


awk的基本用法:nawk
    报告生成工具

GNU: gawk                  

awk [options] '/pattern/{action}'
   
    模式:
        pat1,pat2
        /pattern/
       expression    与sed不同的  
            >, <, >=, <=, ==, !=, ~     如$3 > 500
        BEGIN   前置显示内容
        END      后置显示内容

    action:
        print
        printf

    选项: 
        -F:   指定分隔符

内置变量,
    NF: Number of Field   字段数
    NF=7
    $NF=$7      无论哪行$NF均为最后一个字段

         例子:

           awk -F : ' $3>500 {print$1,$3}BEGIN{print "username uid"} ' /etc/passwd

          -F与分隔符间空格可有可无 ‘’中除print前空格外各种空格均可无

你可能感兴趣的:(编辑器,空间)