zoukankan      html  css  js  c++  java
  • 通配符&正则表达式&特殊符号总结

    通配符

    概念

             bash操作环境下的功能。

              *  代表0个到任意多个字符

             ?  代表一定有一个任意字符

              []  代表一定有[]中的一个字符。如g[a,b,c]d表示gad、gbd、gcd

              [-]  代表一定有编码顺序内的所有字符。如g[0-9]d表示g0d、g1d、g2d...、g9d

              [^]  代表反向选择。如g[^abc]d表示gdd、ged、gfd...、gzd、g0d、g1d...

    特殊字符

             #       注释

                     转义符号

             |       管道符

             ;        命令分隔符,多条命令使用

             ~       用户主文件夹

             $       变量前导符

             &      作业控制,将作业变为后台

             !        逻辑符--非

             /        目录符号

             >,>>  数据流重定向,输出导向

             <,<<  数据流重定向,输入导向

             ''  单引号,不具备变量置换的功能

             ""  双引号,具备变量置换的功能

             ``       里面为先执行的命令,等效于$()

              ()  中间为子shell的起始与结束

             {}   中间为命令块的组合

       重要:

        ① !在[]中不是特殊字符。

          表示反向选择:

            [!a-z]         错误

            [^a-z]        正确

            ② $()与``的区别

          命令                                  结果

          echo $$                            $$

          echo `echo \$\$`               $$              ``中两个表转义

          echo $(echo $$)               $$              $()中一个表转义

    正则表达式

    概念

      正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串。简单地说,就是用在字符串的处理上面的一项“表达式”

    语系对正则表达式的影响

      不同语系下,可能会得到不同的结果。

      如[a-z]在gb2312下得到aAbB...z,C语系下得到abc...z

      一般使用LANG=C语系

      以下符号可以避免编码问题

        特殊符号         代表意义

        [:alnum:]           代表英文大小写字符及数字,即 0-9, A-Z, a-z

        [:alpha:]            代表任何英文大小写字符,即 A-Z, a-z

        [:digit:]              代表数字而已,即 0-9

        [:lower:]            代表小写字符,即 a-z

        [:upper:]            代表大写字符,即 A-Z

        [:blank:]             代表空格键与 [Tab] 按键两者

        [:cntrl:]              代表键盘上面的控制按键,即包括 CR, LF, Tab, Del.. 等等

        [:graph:]            除了空格符 (空格键与 [Tab] 按键) 外的其他所有按键

        [:print:]              代表任何可以被打印出来的字符

        [:punct:]            代表标点符号 (punctuation symbol),即:" ' ? ! ; : # $

        [:space:]            任何会产生空白的字符,包括空格键, [Tab], CR 等等

        [:xdigit:]            代表 16 迚位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字符

    分类

             依据不同的严谨程度分为基础正则表达式与扩展正则表达式

    基础正则表达式的特殊字符

             ^word       word$       .                               *               [list]

             [n1-n2]     [^list]        [^n1-n2]   {n}          {n,m}     {n,}

             ^word       待查找的字符串word在行首

                       找出所有注释行

                                grep –n ‘^#’ regular_express.txt

                       找出开头不是英文字母的行

                                grep –n ‘^[^[:alpha:]]’ regular_express.txt

             word$       带查找的字符串word在行尾

                       找出!结尾的行

                                grep –n ‘!$’ regular_express.txt

                       找出空白行

                                grep –n ‘^$’ regular_express.txt

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

                       找出包括g??d的字符串

                                grep –n ‘g..d’ regular_express.txt

                     转义字符,转义特殊字符

                       找出小数点.结尾的行

                                grep –n ‘.$’ regular_express.txt

             *       重复0个到无穷多个的前一个字符

                       找出包含o、oo、ooo、oooo...的行

                                grep –n ‘oo*’ regular_express.txt

                       找出g开头和g结尾的所有行,当中任意字符

                                grep –n ‘g*g’ regular_express.txt  错误

                                grep –n ‘g.*g’ regular_express.txt  正确

                      找出包含任意数字的行

                                grep –n ‘[:digit:][:digit:]*’ regular_express.txt

             [list]          RE字符集合里面的任意一个字符

                       找到a或d开头的任意行

                                grep –n ‘^[ad]’ regular_express.txt

             [n1-n2]     当前语系下RE字符集合的字符范围里面的任意一个字符

                       找到a或b或c或d开头的任意行

                                grep –n ‘^[a-d]’ regular_express.txt

             [^list]        RE字符集合

                       找到不是a或d开头的任意行

                                grep –n ‘^[^ad]’ regular_express.txt

                                注:b、c开头的会被列出

             [^n1-n2]            当前语系下RE字符集合的字符范围里面的任意一个字符

                       找到不是a或b或c或d开头的任意行

                                grep –n ‘^[^a-d]’ regular_express.txt

             {n}          连续n个前一个RE字符

                      找到go...od(100个o)

                                grep –n ‘go{100}d’ regular_express.txt

             {n,m}     连续n到m个前一个RE字符

                       找到go...od(2到5个o)

                                grep –n ‘go{2,5}d’ regular_express.txt

             {n,}                  连续n个以上前一个RE字符

                       找到go...od(5个o以上)

                                grep –n ‘go{5,}d’ regular_express.txt

    扩展正则表达式的特殊字符

             +       ?       |       ()       ()+

       注:grep只支持基础正则表达式,grep –E(写作egrep)支持扩展正则表达式

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

                       找到god、good、goo...od

                                egrep ‘go+d’ regular_express.txt

             ?       0个或1个前一个RE字符

                       找到gd、god

                                egrep ‘go?d’ regular_express.txt

             |       用或的方式找出多个字符串(无规律)

                       找到glad、black、cache

                                egrep ‘glad|black|cache’ regular_express.txt

             ()       用组字符串找出多个字符串(有特定规律)

                       找到glad、good、geed

                                egrep ‘g(la|oo|ee)d’ regular_express.txt

             ()+    找到有1个或多个重复组字符串

                       找到AxyzxyzxyzC

                                egrep ‘A(xyz)+C’ regular_express.txt

    通配符和正则表达式的区别

      通配符是系统命令使用,一般用来匹配文件名或者什么的用在系统命令中;

      正则表达式是操作字符串,以行为单位来匹配字符串使用的。

    符号

    通配符

    正则表达式

    *

    0个到任意多个字符

    0个到任意多个前一个字符

    ?

    一定有一个任意字符

    0个或1个前一个字符

  • 相关阅读:
    perl学习笔记之:正则表达式
    POJ 3436 ACM Computer Factory (拆点+输出解)
    POJ 3436 ACM Computer Factory (拆点+输出解)
    POJ 1637 Sightseeing tour ★混合图欧拉回路
    POJ 1637 Sightseeing tour ★混合图欧拉回路
    POJ 1149 PIGS ★(经典网络流构图)
    POJ 1149 PIGS ★(经典网络流构图)
    HDU 4571 Travel in time ★(2013 ACM/ICPC长沙邀请赛)
    HDU 4571 Travel in time ★(2013 ACM/ICPC长沙邀请赛)
    UPC 2224 Boring Counting ★(山东省第四届ACM程序设计竞赛 tag:线段树)
  • 原文地址:https://www.cnblogs.com/yc913344706/p/7056913.html
Copyright © 2011-2022 走看看