linux - 练习题 - 06

一、特殊符号

''     所见即所得,吃啥吐啥 
""     特殊符号会被解析运行
``     ==== $() 先运行里面的命令 把结果留下
 
>     重定向符号        先清空文件的内容 然后追加文件的最后 
>>    追加重定向       追加文件的最后 
2>    错误重定向       只有错误的信息 才会通过这个漏洞进入文件中 
2>>   错误追加重定向     
 
~     当前用户的家目录   
        root   ~ /root  
        oldboy ~ /home/oldboy  
!     查找并运行历史命令 
!awk  包含 awk 的命令 最近的一条运行       history |grep awk  
#     注释       root 用户的命令提示符     
$     取出变量的内容       awk 
$     取某一列的内容    普通用户的命令提示符 
*     所有 任何东西 
\     撬棍  转义字符
 
&&    前一个命令执行成功然后在执行后一个命令       
        ifdown eth0 && ifup eth0     
 
||    前一个命令支持失败了再执行后面的命令
 

二、通配符

通配符是用来查找文件的。以 .txt结尾的文件  *.txt  *.log
  1. *    所有 任意
[root@oldboyedu01 oldboy]# find -type f -name "*oldboy*"
./oldboy.txt-hard
./oldboy.txt
./oldboy.txt-hard-s
./oldboy
        
  1. {}  生成序列  
[root@oldboyedu01 oldboy]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu01 oldboy]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@oldboyedu01 oldboy]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
[root@oldboyedu01 oldboy]# echo {1,9,20}
1 9 20
[root@oldboyedu01 oldboy]# echo A{,C}
A AC
[root@oldboyedu01 oldboy]# echo oldboy.txt{,.bak}
                     oldboy.txt oldboy.txt.bak
[root@oldboyedu01 oldboy]# cp oldboy.txt{,.bak}    # 对文件进行了备份。
 

三、正则表达式

1.  什么是正则表达式,为何使用它?
        通过符号表示文件内容
        提高效率,省事。
        支持正则表示式的三剑客:awk   grep   sed 
2.  使用正则的时候注意事项
        正则表达式式按照行进行处理的
        禁止使用中文符号
        给grep egrep配置别名
[root@oldboyedu01 oldboy]# grep --color=auto "3306" /etc/services
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
[root@oldboyedu01 oldboy]# alias grep="grep --color=auto"
[root@oldboyedu01 oldboy]# alias egrep="grep --color=auto"
 
cat >>/etc/profile<<EOF
alias grep="grep --color=auto"
alias egrep="egrep --color=auto"
EOF
 
source /etc/profile
 
[root@oldboyedu01 oldboy]# grep  "3306" /etc/services
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
 
id.txt   
110000198810098735     
110000199007021063  
11000019781119429X  
。。。
 
[root@oldboyedu01 oldboy]# egrep "^[0-9X]+$" id.txt
110000198909149301
110000198909149301
 
3.正则表达式与通配符的区别
通配符   ---   *.txt  *.log 以 .txt  .log结尾的文件    大部分命令都可以使用
正则       ---     在文件中匹配查找内容  包含oldboy的行   linux三剑客
 
4.正则表达式分类
    基础正则     
            ^ $ . *  [] [^]    basic  regular  expression   BRE    (grep  sed  awk)
 
    扩展正则
            | + {}  ()  ?       extended  regular  expression  ERE   (grep -E/egrep  sed  -r  awk)
 

    基础正则

    .       # 表示任意一个字符,不包含空行
    grep '.' oldboy.txt
    grep -o '.' oldboy.txt    # 正则执行过程,每次执行了
    grep '.$' oldboy.txt
 
   \          转义符号,有特殊含义的符号去掉它的特殊含义。
   \n        表示回车换行
   *          前一个字符连续出现了0次或者1次以上  >=0 
    grep '0' oldboy.txt
    grep -o '0*' oldboy.txt    # 正则的执行过程
               
            问题一:为何会取出000  而不是 00 0 0
                    因为正则在表示  连续出现的时候表现出贪婪性 有多少吃多少 有多少匹配多少 
            问题二:为何使用‘0*’会把整个文件的内容都显示出来
                    A*表示
                            连续出现了0次A == 什么也没有 就会把整个文件的内容都显示出来
                            A连续出现了1次以上A
            小结:
                    什么是连续出现
                    -o  的作用
    .*    所有字符 所有符号               
          grep "^.*o" oldboy.txt
          grep "^m.*m$" oldboy.txt
   []     中括号[abc] 相当于是一个字符 找出包含a或b或c
           grep [abc] oldboy.txt
           grep -on [abc] oldboy.txt  # a b c
           grep '[a-f]' oldboy.txt    # a到f
           grep '[a-zA-Z0-9]' oldboy.txt
  [^]
            grep '[^abc]' oldboy.txt   # 表示排除 排除a 或b 或c
 
 练习:以m或n或o开头的 并且以m或g结尾的行
           grep '^[mno].*[mg]$' oldboy.txt
 
 小结:
           ^  $  ^$   .  *  .*  []  [^]  
 

扩展正则

+     前一个符号连续出现了1次或多次
        grep -E '0+' oldboy.txt
        egrep '0' oldboy.txt  -o
        egrep '0+' oldboy.txt -o
        egrep [a-z]  oldboy.txt
        连续出现的小写字母
                egrep '[a-z]+' oldboy.txt -o    
        小结:
                +  可以把连续的东西通过正则取出来
                    一般与[]配合 
|       表示或者
          egrep 'oldboy|linux' oldboy.txt
        
egrep '[ab]' oldboy.txt
egrep 'a|b' oldboy.txt
 
[]与|区别:
        []表示的是 单个字符或者[a-z]
        |表示单个字符或者多个字符
()  括号中的内容相当于是一个整体 后向应用(反向引用)
 egrep 'oldb(o|e)y' oldboy.txt
 
后向引用,反向引用
sed  把你想要的内容先保护起来(通过小括号)然后再使用
[root@oldboyedu01 oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g'
            <123456>
           [root@oldboyedu01 oldboy]# echo 123456|sed -r 's#.(.)..(.)(.)#\3#g'
                     6
 
{}    o{n,m}  前一个字符连续出现了至少n次,最多m次。
      o{n}      前一个字符连续出现了n次。
      o{n,}     前一个字符连续出现了至少n次,
      o{,m}    前一个字符最多出现了m次。
            egrep  '0{3,4}' oldboy.txt
            egrep -o '0{3,4}' oldboy.txt
            egrep  '0{3,}' oldboy.txt   # 连续出现3次以上
            egrep  '0{3}' oldboy.txt    # 连续出现3次
            egrep '[0-9]{5,}' oldboy.txt  # 数字连续出现5次以上的
?  表示前一个字符连续出现0次或者1次
        [root@oldboyedu01 oldboy]# egrep 'go?d' li.log
gd
god
[root@oldboyedu01 oldboy]# egrep 'go*d' li.log
gd
good
god
gooood
 

四、正则表达式总结

连续出现(重复)              
*        >=0              
+        >=1              
?        0 1              
{n,m}    >=n  <=m              
{n}      ==n      
其他              
.        任意一个字符             
[abc]    一个整体 相当于是一个字符     [a-z] [0-9] [A-Z]     [^abc]   排除                    
|        或者            
()       后向引用  反向引用  先保护再使用             
^             
$    
.*       所有     
^$       空行   

五、基础正则与扩展正则区别

    支持基础正则            基础+扩展          
    grep                    egrep === grep -E             
    sed                       sed -r          
    awk                      awk       
 
 

帮助文档:

        man grep
        info  grep
        
 
 
 
 
posted @ 2018-09-05 23:46  Alice的小屋  阅读(89)  评论(0编辑  收藏  举报