#

6. 正则符号说明

课程知识回顾

01. 课程知识回顾
    文件属性章节:
	ll -i /etc/hosts
	33584339 -rw-r--r--. 2 root root 192 Apr 15  2019 /etc/hosts
    1) inode信息:
	   inode是什么?
	   作用概述: 索引节点/存储文件属性信息
	   诞生过程: 磁盘格式化=创建文件系统
	   特点说明: inode号码相同,互为硬链接
	   
	   block是什么?
       作用概述: 数据块/存储文件具体内容     
       诞生过程: 磁盘格式化=创建文件系统
	   特点说明: 根据企业情况,调整block大小
	    
       企业面试题: 系统中文件读取原理??

    2) 文件类型和文件权限
       文件类型: 普通文件 - 目录文件 d 链接文件 l  -- file
                  find tar which
	   文件权限: r=4 读  w=2 写 x=1 执行 - 没有权限 0
	             属主 属组 其他用户
				 
	3) 硬链接数
	   硬链接:
       作用概述: 读取文件的多个入口	   
	   诞生过程: ln 源文件 链接文件
	   特点说明:
	   01. inode号码相同
	   02. 源文件删除,链接文件依旧有效
	   03. 目录无法创建硬链接
	   04. 创建出的新的目录硬链接数默认为2 
	   
	   软链接:
	   作用概述: 文件数据的快捷方式
	   诞生过程: ln -s 源文件 链接文件
	   特点说明:
	   01. 源文件删除,链接文件失效
	   02. 普通文件和目录都可以创建软链接
	   
# 企业面试题: 如何将数据真正的删除?
	   01. 确保文件的硬链接数为0   i_link
	   02. 确保文件没有被进程占用  i_count
	   
	4) 属组和属主
	   用户的类型:
	   超级管理员   root    皇帝
	   虚拟用户     nobody  傀儡
	   普通用户     oldboy  平民
	   
	5) 文件时间信息
	   修改时间信息  mtime
	   访问时间信息  atime
	   改变时间信息  ctime
	   find /oxldboy -type f -mtime +7  --- 7天以前
	   find /oldboy -type f -mtime -7  --- 最近7天
	   find /oldboy -type f -mtime 7   --- 正好前面第7天
	   date命令如何使用 
	   ntpdate命令进行时间同步

1. 系统符号学习作用

    a 简化操作 .. ~ ; &&
    b 进行匹配	

2. 系统特殊符号

2.1 基础符号系列 $ ! |

# 基础符号系列	
	美元符号:$  用户提示符
			    调取变量
			    取出指定列的信息(awk)   awk '{print $3}' /oldboy/oldboy.txt
			    一行的结尾
			    
	叹号符号: !  取反或者排除
    		    取出最近的命令
			    强制操作处理  例如:wq! q!
			    
	井号符号: #
			    
	竖线符号: | 管道符号 前一个命令执行结果交给后面命令处理
	            xargs  命令|xargs 命令
                 xargs: 将信息进行分组显示
  
# 补充: 如何忽略别名功能:
    01. 使用命令的绝对路径
    02. 在命令执行前加撬棍
    03. 在xargs信息后面命令自动忽略别名	   
       
# 查找指定数据信息进行复制  查找出*.txt文件,批量复制到/tmp目录
 01. 将找到的信息放到cp 和 最终目录中间
           find /oldboy -type f -name "*.txt"|xargs -i cp {} /oldgirl   
 02. 利用cp指明谁是数据最终保存的目录信息
           find /oldboy -type f -name "*.txt"|xargs  cp -t /oldgirl	   
		   
# 查找指定数据信息进行移动  查找出*.txt文件,批量移动到/tmp目录
  01. 将找到的信息放到cp 和 最终目录中间
           find /oldboy -type f -name "*.txt"|xargs -i mv {} /oldgirl   
  02. 利用cp指明谁是数据最终保存的目录信息
           find /oldboy -type f -name "*.txt"|xargs mv -t /oldgirl
   

2.2 引号符号系列 ("" '' `` 没有引号 )

 #   ''  输出的信息,所见即所得
[root@oldboyedu oldboy]# echo 'oldboy $LANG $oldgirl'
oldboy $LANG $oldgirl
       
#   ""  和单引号功能类似 但对特殊信息会做解析
 [root@oldboyedu oldboy]# echo "oldboy $LANG $oldgirl"
 oldboy en_US.UTF-8 123
       
#   ``($())   将引号中的命令先执行,将执行结果交给引号外面的命令进行处理

# 没有引号 和双引号功能类似 但是可以直接识别通配符信息

2.3 重定向符号 > >> 2> 2>> < <<

>/1>    标准输出重定向符号
2>      错误输出重定向符号
>>/1>   标准输出追加重定向符号
2>>     错误输出追加重定向符号
	   
# 如何将正确信息和错误信息都输出到文件中:(日志文件)
    [root@oldboyedu oldboy]# cho oldboy >/oldboy/ok.txt 2>/oldboy/error.txt
    [root@oldboyedu oldboy]# cat /oldboy/error.txt
    -bash: cho: command not found
    [root@oldboyedu oldboy]# echo oldboy >/oldboy/ok.txt 2>/oldboy/error.txt
    [root@oldboyedu oldboy]# cat /oldboy/ok.txt 
    oldboy
	   
	# 方法一: 将正确和错误信息同时保留到一个文件
	   [root@oldboyedu oldboy]# echo oldboy >>/oldboy/info.log 2>>/oldboy/info.log 
       [root@oldboyedu oldboy]# cho oldboy >>/oldboy/info.log 2>>/oldboy/info.log 
       [root@oldboyedu oldboy]# cat /oldboy/info.log
       oldboy
       -bash: cho: command not found
	   
	# 方法二: 将正确和错误信息同时保留到一个文件
       [root@oldboyedu oldboy]# echo oldboy &>/oldboy/info.log  
       [root@oldboyedu oldboy]# cat /oldboy/info.log
       oldboy
       [root@oldboyedu oldboy]# cho oldboy &>/oldboy/info.log  
       [root@oldboyedu oldboy]# cat /oldboy/info.log
       -bash: cho: command not found

    # 方法三: 将正确和错误信息同时保留到一个文件
	   [root@oldboyedu oldboy]# echo oldboy >/oldboy/info.log 2>&1 
       [root@oldboyedu oldboy]# cat /oldboy/info.log
       oldboy
       [root@oldboyedu oldboy]# cho oldboy >/oldboy/info.log 2>&1 
       [root@oldboyedu oldboy]# cat /oldboy/info.log
       -bash: cho: command not found

<    标准输入重定向符号
tr <    xargs <
<<   标准输入追加重定向符号
cat >>/oldboy.txt<<EOF
xXX
xXX
EOF

2.4 路径信息 ~ - .. .

#  ../  上一级目录
#  ./   当前路径
# ~    返回到家目录
# -    两个目录之间进行快速切换   cd -
      An argument of - is equivalent to $OLDPWD(环境变量)
	        
# 补充说明:
[root@oldboyedu tmp]# cd $OLDPWD     # 等价于 cd -
[root@oldboyedu oldboy]# cd $OLDPWD
[root@oldboyedu tmp]# cd $OLDPWD
[root@oldboyedu oldboy]# echo $OLDPWD
/tmp
[root@oldboyedu oldboy]# cd /tmp/
[root@oldboyedu tmp]# echo $OLDPWD
/oldboy

2.5 逻辑符号 && / ||

#	&&  与逻辑符号  前一个命令执行成功, 再执行后面的命令
#	||  或逻辑符号  前一个命令执行失败, 再执行后面的命令
	   
#	&&符号实践操作:
    [root@oldboyedu tmp]# # 需求: 想创建一个/alex目录, 在目录中创建一个oldboy.txt 一条命令搞定
    
    [root@oldboyedu tmp]# mkdi /alex ; touch /alex/oldboy.txt    -------两个命令都报错
    -bash: mkdi: command not found
    touch: cannot touch ‘/alex/oldboy.txt’: No such file or directory
    
    [root@oldboyedu tmp]# mkdi /alex && touch /alex/oldboy.txt   ----前面的命令报错,不执行后面的命令
    -bash: mkdi: command not found
    
    [root@oldboyedu tmp]# mkdir /alex && touch /alex/oldboy.txt
    
    [root@oldboyedu tmp]# ll /alex/oldboy.txt 
    -rw-r--r--. 1 root root 0 Oct 10 03:00 /alex/oldboy.txt
	 
     
# ||符号实践操作
[root@oldboyedu tmp]# # 需求: /alex/oldboy.txt删除失败了,在/alex/error.txt文件中生成失败信息

[root@oldboyedu tmp]# rmx /alex/oldboy.txt || echo "failed" >>/alex/error.txt
-bash: rmx: command not found

[root@oldboyedu tmp]# cat /alex/error.txt
failed

[root@oldboyedu tmp]# rm /alex/oldboy.txt || echo "failed" >>/alex/error.txt
[root@oldboyedu tmp]# cat /alex/error.txt
failed

3. 系统通配符号 *

匹配文件名称信息

# 利用通配符号匹配文件名称信息
	# *  模糊匹配所有内容  oldboy old ol o*
	   find -name "*.txt"
	   ll /oldboy/*.txt 
	
	# {} 生成序列信息 (生成一行序列)
	  # 生成连续序列
	   echo {1..10}
	   echo {01..100}
	   echo {a..z}
	   echo {A..Z}
	   
	  # 生成不连续序列
	   echo {1..10..2}  奇数序列
	   echo {2..10..2}  奇数序列
	   echo {www,bbs,blog}
	   
	  # 生成组合序列
	   [root@oldboyedu tmp]# echo {A,B}{01,02}
       A01 A02 B01 B02
       [root@oldboyedu tmp]# echo A{01,02}
       A01 A02
       [root@oldboyedu tmp]# echo A{,02}
       A A02

     #  快速备份文件数据方法
	   [root@oldboyedu tmp]# # cp /oldboy/oldboy.txt /oldboy/oldboy.txt.bak
	   
       [root@oldboyedu tmp]# echo oldboy.txt{,bak}
       oldboy.txt oldboy.txtbak
       
       [root@oldboyedu tmp]# echo oldboy.txt{,.bak}
       oldboy.txt oldboy.txt.bak
       
       [root@oldboyedu tmp]# echo /oldboy/oldboy.txt{,.bak}
       /oldboy/oldboy.txt /oldboy/oldboy.txt.bak
       
       [root@oldboyedu tmp]# cp /oldboy/oldboy.txt{,.bak}   --最终命令
	   
 # 测试题:
   # 01. 在/oldboy目录中创建alex.txt文件,并在/oldboy目录中生成alex.txt.ori备份文件
    mkdir /oldboy 
    touch alex.txt 
    cp /oldboy/alex.txt{,.ori}

   # 02. 如何将备份文件快速还原
    rm /oldboy/alex.txt -f 
    mv /oldboy/alex.txt{.ori,}
    
    # 快速还原
    mv /oldboy/alex.txt.ori /oldboy/alex.txt

4. 正则符号

匹配文件内容信息

 # 正则符号   
    1. 利用正则符号匹配文件内容信息
	2. 正则符号经常出现在各种开发语言中, python java php 
	3. 正则符号经常被三剑客命令使用
	 
# 基础正则符号: basic    regular expression BRE
 # 1. 尖角符号:^ 
	   以什么开头的信息 ll /oldboy|grep "^d" 
 # 2. 美元符号:$
	   以什么结尾的信息 ll -F /etc/|grep /$
	
# 创建测试环境:
    cat >>/oldboy/oldboy.txt<<EOF
    # oldboyedu-sz-01
    oldboy-linux
    oldboy-python-linux
    
    # oldboyedu-sh
    oldboy-linux
    oldboy-python-linux
    
    # oldboyedu-bj
    oldboy-linux
    java
    mysql
    go
    python
    EOF
    
    [root@oldboyedu tmp]# cat /oldboy/oldboy.txt
    # oldboyedu-sz-01
    oldboy-linux
    oldboy-python-linux
    
    # oldboyedu-sh
    oldboy-linux
    oldboy-python-linux
    
    # oldboyedu-bj
    oldboy-linux
    java
    mysql
    go
    python
	
# 01. 将以oldboy开头的行找出来?
	grep "^oldboy" 文件中过滤
	
	grep "^oldboy" 文件中过滤  
	发屁
	cat 文件|grep  "^oldboy"
	脱裤子    发屁
	
# 02. 将以linux结尾的行找出来?
	grep "linux$"  文件中过滤 
	
# 03. 将全部内容显示,但不要显示空行
    ^oldboy     linux$
	^$  -- 空行
	grep -v "^$" 文件中过滤 
	
# 3. 尖号美元:^$
       空行符号	
       
#	扩展正则符号: extended regular expression ERE 

课程内容总结

    01. 系统符号
        1. 系统常用符号 # $ 
        2. 路径系列符号 ~ - .. .
        3. 重定向符号   > >> 2> 2>> < <<
        4. 逻辑符号     && ||
        5. 引号符号     "" '' `` 没有引号		
	02. 通配符号 根据文件名称进行筛选过滤
	    *  模糊匹配字符
		{} 生成序列信息 / 生成组合序列 (快速备份文件/快速恢复文件)
	03. 正则符号 根据文件内容进行筛选过滤
        1. 基础正则符号 grep  sed  awk    马云
		2. 扩展正则符号 grep? sed? awk    贝索斯 亚马逊  

课程知识回顾:

    1) 系统符号:
	   基础系列: # $ ! |  
	   引号系列: '' "" ``=$() 没引号
	   定向符号: > >> 2> 2>> < <<
	   路径符号: . .. ~ -=$OLDPWD
	   逻辑符号: && ||  mkdir /oldboy && touch /oldboy/oldboy.txt || echo "目录已经存在,无须创建"
	2) 通配符号: 用于匹配文件名称信息
	   * 模糊匹配信息:
	   {}生成序列信息: 有序序列 无序序列 组合序列(快速备份和恢复文件)
	3) 正则符号 
	   基础正则符号: grep sed awk
	   ^ 以什么开头的信息进行匹配:
	   [root@oldboyedu ~]# grep "^old" /oldboy/oldboy.txt
       oldboy-linux
       oldboy-python-linux
       oldboy-linux oldboy01
       oldboy-python-linux
       oldboy-linux
       [root@oldboyedu ~]# sed -n '/^old/p' /oldboy/oldboy.txt
       oldboy-linux
       oldboy-python-linux
       oldboy-linux oldboy01
       oldboy-python-linux
       oldboy-linux
       [root@oldboyedu ~]# awk '/^old/' /oldboy/oldboy.txt
       oldboy-linux
       oldboy-python-linux
       oldboy-linux oldboy01
       oldboy-python-linux
       oldboy-linux  
	   
	   $ 以什么结尾的信息进行匹配
	   ^$取出文件中的空行内容
	     grep -v "^$" /oldboy/oldboy.txt
	 

5. 正则符号

#  测试环境:
cat >>~/oldboy_test.txt<<EOF
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
EOF	

基础正则符号

5.1 点符号 .

  • 匹配任意一个字符,且只有一个字符
	# 命令执行结果:
	   [root@oldboyedu ~]# grep "." ~/oldboy_test.txt 
       I am oldboy teacher!
       I teach linux.
       
       I like badminton ball ,billiard ball and chinese chess!
       my blog is http://oldboy.blog.51cto.com
       our site is http://www.etiantian.org
       my qq num is 49000448.
       
       not 4900000448.
       my god ,i am not oldbey,but OLDBOY!
  
	# 显示匹配过程:   -o
       [root@oldboyedu ~]# grep "." ~/oldboy_test.txt  -o
       I
        
       a
       m

       o
       l
       d

5.2 星符号 *

  • 匹配前一个字符连续出现了0次或者多次
	   [root@oldboyedu ~]# grep "0*" ~/oldboy_test.txt
       I am oldboy teacher!
       I teach linux.
       
       I like badminton ball ,billiard ball and chinese chess!
       my blog is http://oldboy.blog.51cto.com
       our site is http://www.etiantian.org
       my qq num is 49000448
       
       not 4900000448.
       my god ,i am not oldbey,but OLDBOY!

5.3 点和星结合: .* 匹配任意所有信息 .* == *

	  [root@oldboyedu ~]# grep "^m.*m$" ~/oldboy_test.txt
       my blog is http://oldboy.blog.51cto.com
	   
	# 问题: 贪婪匹配问题:
	   [root@oldboyedu ~]# grep "^m.*o" ~/oldboy_test.txt
       my blog is http://oldboy.blog.51cto.com
       my god ,i am not oldbey,but OLDBOY!
       
    # 指定具体信息阻止贪婪匹配
       [root@oldboyedu ~]# grep "^m.*to" ~/oldboy_test.txt
       my blog is http://oldboy.blog.51cto.com

5.4 转义符号: \

# 将文件中的以 . 结尾的信息进行过滤??

# \作用:
 01. 将有特殊意义符号,转义成普通信息进行识别
 02. 将没有意义的信息转义为有特殊意义的信息
 
# \n   换行符号
# \t   制表符号

# 换行符号作用:
[root@oldboyedu ~]# echo "oldboy01oldboy02"
oldboy01oldboy02

[root@oldboyedu ~]# echo "oldboy01\noldboy02\noldboy03"
oldboy01\noldboy02\noldboy03

[root@oldboyedu ~]# echo -e "oldboy01\noldboy02\noldboy03"
oldboy01
oldboy02
oldboy03

[root@oldboyedu ~]# echo -e "oldboy01\noldboy02\noldboy03" >oldboy.txt

[root@oldboyedu ~]# cat oldboy.txt
oldboy01
oldboy02
oldboy03
		   
[root@oldboyedu ~]# grep ".$" oldboy_test.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
0101010101
11111
my god ,i am not oldbey,but OLDBOY!

[root@oldboyedu ~]# grep "\.$" oldboy_test.txt 
I teach linux.
my qq num is 49000448.
not 4900000448.

5.5 括号符号:[ ]

 #  匹配多个字符信息
       [root@oldboyedu ~]# grep "oldb[oe]y" oldboy_test.txt
       I am oldboy teacher!
       my blog is http://oldboy.blog.51cto.com
       my god ,i am not oldbey,but OLDBOY!	  

  #    问题: 将以I开头和m开头的行都找出来?
       [root@oldboyedu ~]# grep "^[Im]" oldboy_test.txt 
       I am oldboy teacher!
       I teach linux.
       I like badminton ball ,billiard ball and chinese chess!
       my blog is http://oldboy.blog.51cto.com
       my qq num is 49000448.
       my god ,i am not oldbey,but OLDBOY!	   
	 
	   [root@oldboyedu ~]# grep "^[a-Z]" /etc/selinux/config 
       SELINUX=enforcing
       SELINUXTYPE=targeted 
	 

5.6 括号和尖号组合 [^]

# 排除符号
	   [root@oldboyedu ~]# grep "[abc]" oldboy_test.txt    
       I am oldboy teacher!
       I teach linux.
       I like badminton ball ,billiard ball and chinese chess!
       my blog is http://oldboy.blog.51cto.com
       our site is http://www.etiantian.org
       my god ,i am not oldbey,but OLDBOY!
       
       
       [root@oldboyedu ~]# grep "[^abc]" oldboy_test.txt  //排除包含a、b、c的字符
       I am oldboy teacher!
       I teach linux.
       I like badminton ball ,billiard ball and chinese chess!
       my blog is http://oldboy.blog.51cto.com
       our site is http://www.etiantian.org
       my qq num is 49000448.
       not 4900000448.
       0101010101
       11111
       my god ,i am not oldbey,but OLDBOY!

扩展正则符号:

  • 扩展正则符号默认 grep sed不能直接识别

  • grep 提升自己 -- egrep/grep -E

  • sed 提升自己 -- sed -r

1. +号符号:

 # 匹配前一个字符连续出现了1次或者多次    
    [root@oldboyedu ~]# grep "0*" oldboy_test.txt 
    I am oldboy teacher!
    I teach linux.
    I like badminton ball ,billiard ball and chinese chess!
    my blog is http://oldboy.blog.51cto.com
    our site is http://www.etiantian.org
    my qq num is 49000448.
    not 4900000448.
    my god ,i am not oldbey,but OLDBOY!
    
    [root@oldboyedu ~]# grep "0+" oldboy_test.txt 
    [root@oldboyedu ~]# egrep "0+" oldboy_test.txt 
    my qq num is 49000448.
    not 4900000448.
    [root@oldboyedu ~]# egrep "0+" oldboy_test.txt -o
    000
    00000
	
	张三   110105199004067631
	李四   104105199004067631
	赵六   oldboy
	王五   104105199004067631

#  找出身份证信息输入错误的内容
	[root@oldboyedu ~]# grep [0-9] oldboy_test02.txt 
    张三   110105199004067631
    李四   104105199004067631
    王五   104105199004067631
    
    [root@oldboyedu ~]# grep -E "[0-9]+" oldboy_test02.txt 
    张三   110105199004067631
    李四   104105199004067631
    王五   104105199004067631
    
    [root@oldboyedu ~]# grep -E "[0-9]+" oldboy_test02.txt -o
    110105199004067631
    104105199004067631
    104105199004067631
    
    [root@oldboyedu ~]# grep -Ev "[0-9]+" oldboy_test02.txt
    赵六   oldboy

2. 竖线符号:|

# 并且符号,用于匹配多个信息
	[root@oldboyedu ~]# grep -E "oldboy|oldbey" oldboy_test.txt  ---字符串之间
    I am oldboy teacher!
    my blog is http://oldboy.blog.51cto.com
    my god ,i am not oldbey,but OLDBOY!
    
    [root@oldboyedu ~]# grep -E "oldb[oe]y" oldboy_test.txt   ---字符之间
    I am oldboy teacher!
    my blog is http://oldboy.blog.51cto.com
    my god ,i am not oldbey,but OLDBOY!

3. 括号符号: ()

# 作用:
 # 1. 指定信息进行整体匹配
	[root@oldboyedu ~]# grep  "oldb[oe]y" oldboy_test.txt 
    I am oldboy teacher!
    my blog is http://oldboy.blog.51cto.com
    my god ,i am not oldbey,but OLDBOY!
    
    [root@oldboyedu ~]# grep  "oldboey" oldboy_test.txt 
    my god ,i am not oldboey,but OLDBOY!
    
    [root@oldboyedu ~]# grep -E "oldb(oe)y" oldboy_test.txt 
    my god ,i am not oldboey,but OLDBOY!
    
    [root@oldboyedu ~]# grep -E "oldb(o|e)y" oldboy_test.txt 
    I am oldboy teacher!
    my blog is http://oldboy.blog.51cto.com
    my god ,i am not oldbey,but OLDBOY!
	
 # 2. 进行后项引用前项使用: sed命令替换功能
  # 批量创建用户 oldboy01..oldboy10
	[root@oldboyedu ~]# echo oldboy{01..10}
    oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09 oldboy10
    [root@oldboyedu ~]# echo oldboy{01..10}|xargs
    oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09 oldboy10
    [root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1
    oldboy01
    oldboy02
    oldboy03
    oldboy04
    oldboy05
    oldboy06
    oldboy07
    oldboy08
    oldboy09
    oldboy10
    
    [root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1|sed 's#(.*)#useradd \1#g'
    sed: -e expression #1, char 19: invalid reference \1 on `s' command's RHS
    xargs: echo: terminated by signal 13
    
    [root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g' ---\1表示引用前面()里的内容
    useradd oldboy01
    useradd oldboy02
    useradd oldboy03
    useradd oldboy04
    useradd oldboy05
    useradd oldboy06
    useradd oldboy07
    useradd oldboy08
    useradd oldboy09
    useradd oldboy10
    
    [root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g'|bash
    useradd: user 'oldboy02' already exists
    useradd: user 'oldboy03' already exists
    useradd: user 'oldboy04' already exists
    useradd: user 'oldboy05' already exists
    useradd: user 'oldboy06' already exists
    useradd: user 'oldboy07' already exists
    useradd: user 'oldboy08' already exists
    useradd: user 'oldboy09' already exists
    useradd: user 'oldboy10' already exists
	
# 企业面试题: 批量创建用户 oldboy01..oldboy10,并给每个用户设置密码信息,默认初始化密码(123456)
	01. 如何创建用户 给用户设置密码
	02. 基础命令 echo {}/seq -w 10
	03. sed命令替换信息方法
	04. 正则符号 .* () 
	05. 基础符号 ; |
	06. bash内置命令
	[root@oldboyedu ~]# seq -w 10|sed -r 's#(.*)#useradd oldboy\1;echo 123456|passwd --stdin oldboy\1#g'|bash
    useradd oldboy01;echo 123456|passwd --stdin oldboy01
    useradd oldboy02;echo 123456|passwd --stdin oldboy02
    useradd oldboy03;echo 123456|passwd --stdin oldboy03
    useradd oldboy04;echo 123456|passwd --stdin oldboy04
    useradd oldboy05;echo 123456|passwd --stdin oldboy05
    useradd oldboy06;echo 123456|passwd --stdin oldboy06
    useradd oldboy07;echo 123456|passwd --stdin oldboy07
    useradd oldboy08;echo 123456|passwd --stdin oldboy08
    useradd oldboy09;echo 123456|passwd --stdin oldboy09
    useradd oldboy10;echo 123456|passwd --stdin oldboy10
	
  #  将输出的信息
	echo 123456 ==> 转换为 <123456>进行显示
	[root@oldboyedu ~]# # echo 123456 ==> 转换为 <123456>进行显示
    [root@oldboyedu ~]# echo 123456
    123456
    [root@oldboyedu ~]# echo 123456|sed -r 's#([1-6]+)#\1#g'
    123456
    [root@oldboyedu ~]# echo 123456|sed -r 's#([1-6]+)#<\1>#g'
    <123456>
    [root@oldboyedu ~]# echo 123456|sed -r 's#(.*)#<\1>#g'
    <123456>
	
	echo 123456 ==> 转换为 <12><34><56>进行显示
	[root@oldboyedu ~]# # echo 123456 ==> 转换为 <12><34><56>进行显示
    [root@oldboyedu ~]# echo 123456
    123456
    [root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><\2><\3>#g"
    <12><34><56>
    [root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><><\3>#g"
    <12><><56>
    [root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><\3><\3>#g"
    <12><56><56>
    [root@oldboyedu ~]# echo 123456|sed -r "s#(..)(..)(..)#<\1><\2><\3>#g"
    <12><34><56>
	
    echo 123456 ==> 转换为 <12>34<56>进行显示
    # echo 123456|sed -r "s#(..)(..)(..)#<\1>\2<\3>#g"

4. 括号符号:{}

# 可以指定字符连续匹配的次数
  # 第一种情况: x{n,m}  表示前一个字符至少连续出现n次,最多出现m次
	[root@oldboyedu ~]# grep -E "0{2,3}" oldboy_test.txt 
    my qq num is 49000448.
    not 4900000448.
    [root@oldboyedu ~]# grep  "0+" oldboy_test.txt 
    [root@oldboyedu ~]# grep -E "0+" oldboy_test.txt 
    my qq num is 49000448.
    not 4900000448.
    [root@oldboyedu ~]# grep -E  "0+" oldboy_test.txt -o
    000
    00000
    [root@oldboyedu ~]# grep -E "0{2,3}" oldboy_test.txt  -o
    000
    000
    00
    [root@oldboyedu ~]# grep -E "0{2,4}" oldboy_test.txt
    my qq num is 49000448.
    not 4900000448.
    [root@oldboyedu ~]# grep -E "0{2,4}" oldboy_test.txt -o
    000
    0000
	
 # 第二种情况: x{n} 表示前一个字符正好连续出现了n次
    [root@oldboyedu ~]# grep -E "0{2}" oldboy_test.txt
    my qq num is 49000448.
    not 4900000448.
    [root@oldboyedu ~]# grep -E "0{2}" oldboy_test.txt -o
    00
    00
    00
	
  # 第三种情况: x{n,} 表示前一个字符至少连续出现n次,最多出现多少次不限
	[root@oldboyedu ~]# grep -E "0{2,}" oldboy_test.txt
    my qq num is 49000448.
    not 4900000448.
    [root@oldboyedu ~]# grep -E "0{2,}" oldboy_test.txt -o
    000
    00000

  # 第四种情况: x{,m} 表示前一个字符至少连续出现0次,最多出现m次
	[root@oldboyedu ~]# grep -E "0{,2}" oldboy_test.txt
    I am oldboy teacher!
    I teach linux.
    
    I like badminton ball ,billiard ball and chinese chess!
    my blog is http://oldboy.blog.51cto.com
    our site is http://www.etiantian.org
    my qq num is 49000448.
    
    not 4900000448.
    my god ,i am not oldbey,but OLDBOY!
    my god ,i am not oldboey,but OLDBOY!
    
    [root@oldboyedu ~]# grep -E "0{,2}" oldboy_test.txt -o
    00
    0
    00
    00
    0

5. 问号符号 ?

总结

	*  匹配前一个字符出现0次或者多次
	+  匹配前一个字符出现1次或者多次
	{} 匹配前一个字符指定出现多少次,至少0次
	?  匹配前一个字符出现0次或者1次
# 定义匹配前一个字符出现0或者1次
    
# 创建一个测试环境:
    cat >>oldboy_test03.txt<<EOF
    gd
    god
    good
    goood
    gooood
    EOF

	[root@oldboyedu ~]# grep "o*" oldboy_test03.txt 
    gd
    god
    good
    goood
    gooood
    [root@oldboyedu ~]# egrep "o+" oldboy_test03.txt 
    god
    good
    goood
    gooood
    [root@oldboyedu ~]# egrep "o?" oldboy_test03.txt 
    gd
    god
    good
    goood
    gooood
    [root@oldboyedu ~]# egrep "o?" oldboy_test03.txt -o
    o
    o
    o
    o
    o
    o
    o
    o
    o
    o
    [root@oldboyedu ~]# egrep "o+" oldboy_test03.txt -o
    o
    oo
    ooo
    oooo

# 补充: 想让grep sed命令可以直接识别扩展正则
	[root@oldboyedu ~]# grep "o\+" oldboy_test03.txt
    god
    good
    goood
    gooood
    [root@oldboyedu ~]# grep -E "0{,2}" oldboy_test.txt^C
    [root@oldboyedu ~]# echo 123456|sed  "s#\(..\)\(..\)\(..\)#<\1><\2><\3>#g"
    <12><34><56>

利用ip address show eth0只把IP地址信息显示出来?

# 利用ip address show eth0只把IP地址信息显示出来?
	[root@oldboyedu ~]# ip a s eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:81:57:66 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::31af:a93d:2d09:e293/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
           
    [root@oldboyedu ~]# ip a s eth0|grep "[0-9].[0-9].[0-9].[0-9]"
        inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboyedu ~]# ip a s eth0|grep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
    [root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
        link/ether 00:0c:29:81:57:66 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
        inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o
    10.0.0.200
    10.0.0.255
    [root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o|head -1
    10.0.0.200
    
    
===============================
	[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.)"
        inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.)" -o
    10.
    0.
    0.
    10.
    0.
    0.
    
    [root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.){3}[0-9]+" -o
    10.0.0.200
    10.0.0.255
    
    [root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o
    1500
    1000
    10.0.0.200
    10.0.0.255
    
    [root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" 
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboyedu ~]# 
    [root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o
    1500
    1000
    10.0.0.200
    10.0.0.255
    [root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o|head -3|tail -1
    10.0.0.200

作业:

01. sed/awk命令如何进行排除过滤? grep -v	 
02. 批量创建用户 oldboy01..oldboy10,并给每个用户设置随机密码信息
    07. shell
        1) 如何生成随机信息
        2) 变量设置
        3) 循环语句		
03. 取IP地址/取权限数值 利用grep/sed/awk + 正则符号
04. sed	 
	 
posted @ 2020-08-06 18:40  苒苒物华休&  阅读(424)  评论(0编辑  收藏  举报