正则表达式学习笔记

mender 正则表达式学习笔记Jun 15, 201316:55:32


    1. 正则表达式中的特殊符号

      1. [:alnum:] 字母和数字,即0-9, A-Z, a-z

      2. [:alpha:] 字母,即A-Z, a-z

      3. [:lower:] 小写字母,即a-z

      4. [:upper:] 大写字母,即A-Z

      5. [:digit:] 数字,即0-9

      6. [:xdigit:] 16进制的数字,即0-9, A-F, a-f

      7. [:blank:] 空格或Tab

      8. [:graph:] 除了空格和Tab以外的其他所有按键

      9. [:space:] 任何可产生空白的字符,包括Tab, CR

      10. [:cntrl:] 键盘上的控制键,即CR, LF, Tab, Del等等

      11. [:print:] 任何可被打印的字符

      12. [:punct:] 标点符号,即: ” ' ? ! ; # $

    2. grep进阶选项

      grep [-A] [-B] [--color=auto] '搜寻字符串' filename

      1. -A 后面可加数字,表示除了列出该行,后续(after)n行也列出来

      2. -B 后面可加数字,表示除了列出该行,前面(befor)n行也列出来

    3. 语系设定

      正则表达式通常使用export LANG=C的语言设定

    4. 基础正则表达式字符

      1. ^word撷取行首为word的行

        撷取行首为#的行

        grep -n '^#' file

      2. word$ 撷取行尾为word的行

        撷取行尾为!的行

        grep -n '!$' file

      3. . 代表一定有一个任意字符

        两个e中间一定有一个字符

        grep -n 'e.e' file

      4. \ 转义符

        撷取含有单引号的行

        grep -n '\'' file

      5. * 将前面的字符重复零到无穷多个

        找出含有es ess esss等的字符串

        grep -n 'ess*' file (注意不是grep -n 'es*' file)

        代表任意字符可以用 .*

      6. [list] 括号里放的是待搜索的字符,可以写多个

        例如‘a[afl]y' 代表 aay afy aly三种情况

      7. [n1-n2] 里面列出想要撷取的字符范围

        撷取含有数字的那些行

        grep -n '[0-9]' file 或者

        grep -n '[[:digit:]]' file 注意不是 grep -n '[:digit:]' file

      8. [^list] list里列出不要的字符串或范围

        撷取任何非小写字母开头的行

        grep '^[^a-z][^a-z]* ' file

        可以撷取出以下样式的结果

        GNU is free air not free beer.

        I like dog.

        # I am Mender!

      9. \{n,m\} 代表连续nm个前一个RE字符

        \{n\} 代表连续n个前一个RE字符

        \{n,\} 代表连续n到无穷多个前一个RE字符

        grep -n 'go\{2,3\}' file 可以找出 good gooogle 这样的行

        grep -n 'go\{2\}' file 可以找出good google 这样的行

        grep -n 'go\{2,\}' file 可以找出good gooogle goooooogle这样的行

    5. sed工具

      1. 删除2~5行(包括25

        nl /etc/passwd | sed '2,5d'

      2. 在第2行后(即第三行)追加上”drink tea?”字样

        nl /etc/passwd | sed '2a drink tea?'

      3. 在第2行前(即第一行)插入”drink beer?”字样

        nl /etc/passwd | sed '2i drink beer?'

      4. 在第2行后追加多行,使用\

        nl /etc/passwd | sed '2a Drink tea or \

        drink beer?'

      5. 2-5行的内容取代为 “No 2-5 number”

        nl /etc/passwd | sed '2,5c No 2-5 number'

      6. 列出文件的5-7

        nl /etc/passwd | sed -n '5,7p'

      7. 数据替换's/old/new/g',可以使用正则表达式

        删除文件中的#注释

        cat /etc/man.config | sed 's/#.*$//g' | sed '/^$/d'

      8. 直接修改文件内容

        将行尾的.换成!

        sed -i 's/\.$/\!/g' file

      9. sed 后面如果要接超过两个以上的动作时,每个动作前面要加-e才行

        cat /etc/passwd | \

        sed -e '4d' -e '6c no six line' > passwd.new

    6. 扩展的正则表达式

      grep只支持基础的正则表达式,而egrep可以使用扩展的表达式

      1. + 重复一个或一个以上的前一个RE字符

        egrep -n 'go+d' file 可以找出god good goooood …

        使用基础正则表达式为grep -n 'goo*d' file

      2. ? 零个或一个前一个RE字符

        egrep -n 'go?d' flie 可以找出 gd god

        使用基础正则表达式为grep -n 'go\{0,1\}d' file

      3. | 用或的方式查找出数个字符串

        egrep -n 'mender|wangran|dog' file

      4. () 找出群组字符串

        egrep -n 'g(la|oo)d' file可以找出gladgood

      5. ()+多个重复群组判断

        egrep 'A(xyz)+C' file 可以找出 Axyzxyz..C这样的字符串

    7. printf 打印函数

      printf '打印格式' 实际内容

    8. awk工具

      1. awk '条件1{动作1}条件2{动作2}..' file

      2. 注意,awk后续的所有动作是以单引号括住的,由于单引号和双引号必须成对,所以awk的格式内容如果要以print打印时,非变量的文字部分,包括printf中的格式控制都要用双引号来定义!

      3. awk处理流程

        1. 读入第一行,并将第一行的资料填入$0, $1, $2...$0表示一整行,其他的表示一个field

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

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

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

      4. Awk的内建变量

        1. NF 每一行($0)拥有的字段数

        2. NR 目前awk所处理的是第几行数据

        3. FS 目前的分隔符,默认是空格

        :来分割每一行,当第三栏小于10时,打印第三栏

        cat /etc/passwd | awk 'BEGIN{FS=”:”} $3<10{print $1 “\t” $3}'

        打印每人的成绩,并计算每人的总分,其中第一行是标题,第一列是姓名

        cat score.txt | awk '\

        NR==1{printf “%10s %10s %10s %10s %10s\n”, $1, $2, $3, $4, “Total”}\

        NR>=2{total=$2+$3+$4;printf “%10s %10d %10d %10d %10.2f\n”, $1, $2, $3, $4, total}'

        Name 1st 2nd 3th Total

        VBird 23000 24000 25000 72000.00

        DMTsai 21000 20000 23000 64000.00

        Bird2 43000 42000 41000 126000.00

      5. 注意,在{}内的动作,如果需要多个指令时,可利用分号间隔,或者直接以enter键来隔开每个指令。

    9. 判断两个文档之间的差异 diff

      diff [-bBi] from-file to-file

      -b 忽略一行当中,仅有多个空白的差异(“about me”与“about me”是为相同)

      -B 忽略空白行的差异

      -i 忽略大小写差异

    10. 按字节去比较 cmp

      cmp [-s] file1 file2

      -s 将说有不同的字节处都列出来,因为cmp预设仅会输出第一个发现的不同点

    11. 打补丁patch

      patch -pN < patch_file 更新

      patch -R -pN < patch_file 还原

      -p 后面可以接取消几层目录

      -R 代表还原的意思

      1. 制作补丁文件

        diif -Naur passwd.old passwd.new > passwd.patch

      2. 打补丁

        patch -p0 < passwd.patch

    12. 打印文件pr

      打印的时候会打出时间,路径,页码等

转载于:https://www.cnblogs.com/mender/p/3145958.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值