linux特殊符号及正则的使用

11 篇文章 0 订阅

系统特殊符号:

inode号码相同互为硬链接,一个文件只能有一个inode,但是可以有多个block,block大小调整要根据企业需求。
1) 基础符号系列
美元符号:$
叹号符号: ! 取反
下图表示先把以井号开头的过滤出来,再用-v取反。
在这里插入图片描述

   竖线符号: | 管道符号 前一个命令执行结果交给后面命令处理
                xargs  命令|xargs 命令
                xargs: 将信息进行分组显示

xargs详解
在这里插入图片描述

   补充: 如何忽略别名功能:
   01. 使用命令的绝对路径
   02. 在命令执行前加撬棍
   03. 在xargs信息后面命令自动忽略别名	   

我们注意到,xargs后的rm并没有带上-rf,因为rm本身在entos7里就是rm -i的别名,-i的意思就是每次在删除的时候会自动询问你是否删除,如果rm在xargs后,会自动取消rm -i别名。

在这里插入图片描述

   查找指定数据信息进行复制  查找出*.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) 引号符号系列
   ''  输出的信息,所见即所得
   [root@oldboyedu oldboy]# echo 'oldboy $LANG $oldgirl'
   oldboy $LANG $oldgirl

在这里插入图片描述

   ""  和单引号功能类似 但对特殊信息会做解析
   [root@oldboyedu oldboy]# echo "oldboy $LANG $oldgirl"
   oldboy en_US.UTF-8 123

在这里插入图片描述

   ``($())   将引号中的命令先执行,将执行结果交给引号外面的命令进行处理
   没有引号 和双引号功能类似 但是可以直接识别通配符信息

在这里插入图片描述

3) 重定向符号:
   >或者1>    标准输出重定向符号
   2>      错误输出重定向符号
   >>   标准输出追加重定向符号
   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
   
4) 路径信息系列
   ../  上一级目录
   ./   当前路径
   ~    返回到家目录
   -    两个目录之间进行快速切换
        An argument of - is equivalent to $OLDPWD(环境变量)
   补充说明:
   [root@oldboyedu tmp]# cd $OLDPWD
   [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

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]# 
   [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]# 
   
   ||符号实践操作
   [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

系统通配符号:

利用通配符号匹配文件名称信息
*  模糊匹配所有内容  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

正则符号

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 

正则符号
基础正则符号: 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

系统的正则符号部分:

测试环境:
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

基础正则符号: 
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!

   显示匹配过程:
   [root@oldboyedu ~]# grep "." ~/oldboy_test.txt  -o
   I
    
   a
   m
    
   o
   l
   d


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!
   
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

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) 括号符号:[ ]
   匹配多个字符信息
   [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 
 
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
   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  "oldb(oe)y" oldboy_test.txt 
[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'
    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'
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>进行显示	

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次

创建一个测试环境:

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>

总结:
*  匹配前一个字符出现0次或者多次
+  匹配前一个字符出现1次或者多次
{} 匹配前一个字符指定出现多少次,至少0次
?  匹配前一个字符出现0次或者1次

利用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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值