• linux之正则表达式


    正则表达式

    在linux中,通配符是由shell解释的,而正则表达式是由命令解释的。主要的文本处理工具有grep,sed和awk。

    grep匹配模式

      grep按下述方式接受选项和参数   

      grep [options] regex [files]

    参数主要有

    -i  ------------忽略大小写

    -o  ------------只显示匹配的内容

    -v  ------------取反,不匹配

    -l  -------------输出匹配的文件名

    -L  -------------输出不匹配的文件名

    -c  -------------count 输出匹配的数目(行数)

    -n  -------------输出匹配行同时加上行号

    -A  -------------输出匹配行,及其后面的n行

    正则字符

    ^  ------------行首标记,在[^]表示非

    $ -------------结束标记 'abc$'----->abc,hhhhabc

    .  -------------任意字符 'a.c'-------->abc,atc,ajc

    |  -------------    或    --------> 'aaa|bbb'----->aaa,bbbc

    正则范围

    ? ----------------左边第一个字符出现0次或一次

    *  ----------------左边第一个字符出现0到n次

    + -----------------左边第一个字符出现1到n次

    {} ----------------{m}{m,n}{m,}{,n}左边第一个字符出现m/m到n/>m/<n 次

    ()--------------将候选的元素列出来用|分割--(ab|1|2|3)--代表ab1 ab2或ab3

    例子

    grep 'root' /root/test/z.txt---------------显示z.txt中含有root的行

    egrep '^[a-Z]+[0-9]+[a-Z]'  z.txt-----------过滤出字母+数字+字母的行

     grep -v "^#" /etc/ssh/sshd_config |grep -v '^ *$' /etc/ssh/sshd_config

                                                                            ------------------过滤掉sshd_config文件中所有的#和空行

     sed


    sed是一种在线编辑器,它一次处理一行内容,可以将数据进行替换、删除、新增、选取等特定工作

      sed的命令格式为

    sed  [options]  'command'  in_file

    options

    -i:直接修改读取的档案内容

    -n:使用安静模式。一半sed用法,文件所有内容都会背列到屏幕上,如果加上-n参数后,只有经过sed特殊处理的那一行才会被列出来。

    -e:直接在指令列模式上进行sed的动作编辑

    -r:扩展正则表达式

    command

    '[地址1,地址2][函数][参数]'

    1:单行

    1,3:范围,从第一行到第三行

    $:尾行

    正则必须用//包裹起来

    函数

    a:新增,a插入的字符串在新的一行出现。

    c:取代,c后面接字符串,取代n1,n2之间的行。

    d:删除,

    i:插入,插入的字符串在目标行的上一行出现。

    p: 打印,选择某个行打印出来,通常与sed -n连用。打印固定行

    s:取代,替换,通常与正则表达式连用, 例如 1,20s/old/new/g  

    字符串替换:

    sed -n 's/root/zzzz/p' z.txt---------替换root为zzzz,并打印出来。如需全部替换,末尾加g

    $ sed -n 's/root/XXXX/2p' z.txt----替换没行第二个root为,XXXX。

    17,打印每行的第一个单词和第三个单词。

    awk


    awk是一个好用的数据处理工具!相比sed常常作用于一整行的处理,awk则比较倾向于一行当中分成<字段>来处理,语法如下

                  awk  [Options]  'commands'  filename

    Options:

    -F:指定字段的分隔符,默认的分割符是连续空格或制表符。

    -v:定义变量并赋值

    NF变量表示当前记录的字段数。

    NR变量表示AWK读入的行数。

    实例:

    awk -F: '$3>=30 && $3<=40{print $1}' z.txt------------打印uid在30到40范围的用户名

    awk -F: 'NR>=5 && NR<=10{print}' z.txt----------------打印5-10行

    awk -F:'NR%2==1{print NR,$0}' z.txt ------------------打印奇数行

    awk -F: 'NF>5{print NR,$0}' z.txt ------------------------打印字段数大于5的行

    awk-f :'$3!=$4{print $1}' z.txt ----------------------------打印uid不等于gid的用户名

  • 相关阅读:
    HDU 3681 Prison Break(状态压缩dp + BFS)
    POJ 2711 Regular Words(DP + 高精度)
    ZOJ 2745 01-K Code(DP)(转)
    DAG模型——硬币问题
    HDU 1619 Unidirectional TSP(单向TSP + 路径打印)
    DAG模型——嵌套矩阵
    HDU 4294 A Famous Equation(DP)
    HDU 3920 Clear All of Them I(DP + 状态压缩 + 贪心)
    POJ 3254 Corn Fields(DP + 状态压缩)
    HDU 2089 不要62(数位DP)
  • 原文地址:https://www.cnblogs.com/zouruncheng/p/6601124.html
Copyright © 2020-2023  润新知