美文网首页基础知识
linux-正则表示法

linux-正则表示法

作者: Suavitygogo | 来源:发表于2017-03-04 16:54 被阅读6次

    类似于编程的正则表达式

    [a-z],[A-Z],[0-9][^非] ^开头$结尾 .任意一个字符 *重复前一个字符(0或多个)

    '\{重复次数n\}'  '\{重复次数n1,\}'   '\{重复次数n1,n2\}'

    ? :0-1,+ :1~,| :or,(分组)

    格式化打印:printf

    printf '%10s %5i %5i %5i %8.2f \n'`cat filename.txt | grep -v name`

    sed: sed [-nefr] [动作]

    动作说明: [n1[,n2]]function

    n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作

    是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

    function 有底下这些咚咚:

    a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~

    c :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!

    d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

    i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);

    p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~

    s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配 正规表示法!例如 1,20s/old/new/g 就是啦!

    eg:删除2-5行: nl /etc/passwd | sed '2,5d'

    取包含inet关键字的那一行,只取IP地址(其余使用sed 's替换为空' ):

    ifconfig eth0 | grep 'inet ' |sed 's/.*addr://g'|sed 's/Bcast:.*//g'

    awk: awk '条件类型1{动作a;动作b;...} 条件类型2{动作c..}... ' filename

    eg: last |awk '{printf $1 "\t" $3"\n"}'last | awk '{printf $1 "\t lines:"NR"\t columes:"NF"\n"}'

    第三栏小于 10 以下的数据,并且仅列出账号与第三栏:

    cat /etc/passwd | awk '{FS=":"} $3 < 10 {printf $1 "\t" $3 "\n"}'   --第二行开始

    cat /etc/passwd | awk 'BEGIN{FS=":"} $3 < 10 {printf $1 "\t" $3 "\n"}'  --第一行开始

    awk执行流程:

    1. 读入第一行,并将第一行的资料填入 $0, $1, $2.... 等变数当中;

    2. 依据 "条件类型" 的限制,判断是否需要进行后面的 "动作";

    3. 做完所有的动作与条件类型;

    4. 若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。

    awk变量:

    变量名称

    代表意义

    NF

    每一行 ($0) 拥有的字段总数

    NR

    目前 awk 所处理的是『第几行』数据

    FS

    目前的分隔字符,预设是空格键

    文档比较:diff,cmp

    diff: diff [-biB] srcFilename destFilename  比较出所有的不同

    eg: 文档比较:diff /etc/passwd /tmp/test/passwd

    目录比较:diff /etc /tmp/test

    cmp: cmp [-s] srcFilename destFilename   输出第一个不同点 行列

    eg: 文档比较:cmp /etc/passwd /tmp/test/passwd

    相关文章

      网友评论

        本文标题:linux-正则表示法

        本文链接:https://www.haomeiwen.com/subject/oarjgttx.html