linux基础--正则符号

一.系统特殊符号

//系统特殊符号
1.管道符号|
2.引号符号""  ''
1)""
2)''
3.重定向符号>/1>    2>  >>/1>>  2>>
4.路径信息符号 $OLDPWD
5.逻辑符号&&    ||
1)&&
2)||
1.管道符号(前一个命令执行结果交给后面命令处理)
[root@lbz01 lsn]# find /lbz -type f -name "*.txt" |xargs -i cp {} /lsn        //将找到的信息放到cp 和 最终目录中间
#xargs: 将信息进行分组显示
[root@lbz01 lsn]# find /lbz -type f -name "*.txt" |xargs cp -t /lsn           //利用cp指明谁是数据最终保存的目录信息
2.引号符号
[root@lbz01 lbz]# echo "lbz $LANG $lsn"                                       1)""
#"" 和单引号功能类似 但对特殊信息会做解析
lbz en_US.UTF-8 123
[root@lbz01 lbz]# echo 'lbz $LANG $lsn'                                       2)''
lbz $LANG $lsn
补充:
   ``($()) 将引号中的命令先执行,将执行结果交给引号外面的命令进行处理
   没有引号 和双引号功能类似 但是可以直接识别通配符信息
3.重定向符号 
#>/1> 标准输出重定向符号
 2> 错误输出重定向符号
 >>/1>> 标准输出追加重定向符号
 2>> 错误输出追加重定向符号  
方法一: 将正确和错误信息同时保留到一个文件
[root@lbz lbz]# echo lbz >>/lbz/info.log 2>>/lbz/info.log 
[root@lbz lbz]# cho lbz >>/lbz/info.log 2>>/lbz/info.log 
[root@lbz lbz]# cat /lbz/info.log
lbz
-bash: cho: command not found

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

方法三: 将正确和错误信息同时保留到一个文件
[root@lbz lbz]# echo lbz >/lbz/info.log 2>&1 
[root@lbz lbz]# cat /lbz/info.log
lbz
[root@lbz lbz]# cho lbz >/lbz/info.log 2>&1 
[root@lbz lbz]# cat /lbz/info.log
-bash: cho: command not found
4.路径信息符号
#../ 上一级目录
 ./ 当前路径
 ~ 返回到家目录
 - 两个目录之间进行快速切换
[root@lbz01 lbz]# cd /tmp
[root@lbz01 tmp]# cd $OLDPWD
[root@lbz01 lbz]# cd $OLDPWD
[root@lbz01 tmp]# echo $OLDPWD
/lbz
[root@lbz01 tmp]# cd /lbz
[root@lbz01 lbz]# echo $OLDPWD
/tmp
5.逻辑符号
[root@lbz01 lbz]# mkdi /lbz;touch /lbzz/lsny.txt
-bash: mkdi: command not found
touch: cannot touch ‘/lbzz/lsny.txt’: No such file or directory
[root@lbz01 lbz]# mkdi /lbz && touch /lbz/lsny.txt                           1)&&
#与逻辑符号 前一个命令执行成功, 再执行后面的命令
-bash: mkdi: command not found
[root@lbz01 lbz]# mkdir /alex && touch /alex/lbz.txt
[root@lbz01 lbz]# ll /alex/lbz.txt
-rw-r--r--. 1 root root 0 Jan 18 20:07 /alex/lbz.txt
[root@lbz01 lbz]# rmx /lsn/lbz.txt || echo "failed" >>/lsn/error.txt         2)||
#或逻辑符号 前一个命令执行失败, 再执行后面的命令
-bash: rmx: command not found
[root@lbz01 lbz]# cat /lsn/error.txt
failed
[root@lbz01 lbz]# rm /lsn/lbz.txt || echo "failed" >>/lsn/error.txt
[root@lbz01 lbz]# cat /lsn/error.txt
failed

二.系统通配符号

//系统通配符号(利用通配符号匹配文件名称信息)
1. * 模糊匹配所有内容
2. {} 生成序列信息 (生成一行序列)
1) 生成连续序列
2) 生成不连续序列
3) 生成组合序列
4) 快速备份文件数据方法
1. * 模糊匹配所有内容
[root@lbz01 ~]# find /lbz -type f -name "*.txt"                              1. * 模糊匹配所有内容
/lbz/ok.txt
/lbz/error.txt
/lbz/lbz.txt
/lbz/alex.txt
/lbz/lsn.txt
/lbz/lsny.txt
[root@lbz01 ~]# ll /lbz/*.txt
-rw-r--r--. 1 root root  0 Jan 18 20:28 /lbz/alex.txt
-rw-r--r--. 1 root root  0 Jan 18 20:00 /lbz/error.txt
lrwxrwxrwx. 1 root root 12 Jan 18 09:42 /lbz/lbz_soft_link.txt -> /lbz/lbz.txt
-rw-r--r--. 1 root root  0 Jan 18 20:27 /lbz/lbz.txt
-rw-r--r--. 1 root root  0 Jan 18 23:38 /lbz/lsn.txt
-rw-r--r--. 1 root root  0 Jan 18 23:38 /lbz/lsny.txt
-rw-r--r--. 1 root root  4 Jan 18 20:00 /lbz/ok.txt
2. {} 生成序列信息 (生成一行序列)
[root@lbz01 ~]# echo {1..10}                                                  1) 生成连续序列         
1 2 3 4 5 6 7 8 9 10
[root@lbz01 ~]# echo {1..10..2}                                               2) 生成不连续序列
1 3 5 7 9
[root@lbz01 ~]# echo {A,B}{01,02}                                             3) 生成组合序列
A01 A02 B01 B02
[root@lbz01 lbz]# echo /lbz/lbz.txt{,.bak}                                    4) 快速备份文件数据方法
/lbz/lbz.txt /lbz/lbz.txt.bak
[root@lbz01 lbz]# cp /lbz/lbz.txt{,.bak}

三.正则符号

  1. 利用正则符号匹配文件内容信息
  2. 正则符号经常出现在各种开发语言中, python java php
  3. 正则符号经常被三剑客命令使用

1.基础正则符号

basic regular expression BRE

//基础正则符号
1.^以什么开头的信息
2.$以什么结尾的信息
[root@lbz01 ~]# cat >>/lbz/lbz.txt<<EOF                  //创建测试环境
> # lbz-sz-01
> lbz-linux
> lbz-python-linux
>
> # lbz-sh
> lbz-linux
> lbz-python-linux
>
> # lbz-bj
> lbz-linux
> java
> mysql
> go
> python
> EOF
[root@lbz01 ~]# grep "^lbz" /lbz/lbz.txt                 1.将以lbz开头的行找出来
lbz-linux
lbz-python-linux
lbz-linux
lbz-python-linux
lbz-linux
[root@lbz01 ~]# grep "linux$" /lbz/lbz.txt               2.将以lbz结尾的行找出来
lbz-linux
lbz-python-linux
lbz-linux
lbz-python-linux
lbz-linux
[root@lbz01 ~]# grep -v "^$" /lbz/lbz.txt                // 将全部内容显示,但不要显示空行
# lbz-sz-01
lbz-linux
lbz-python-linux
# lbz-sh
lbz-linux
lbz-python-linux
# lbz-bj
lbz-linux
java
mysql
go
python
//基础正则符号
1. .符号
2. *星符号
3. .*点星结合
4. \转义符号
5. []括号符号
6. [^]括号和尖号组合
[root@lbz01 ~]# cat >>~/lbz_test.txt<<EOF                        //创建实验环境
> I am lbz teacher!
> I teach linux.
>
> I like badminton ball ,billiard ball and chinese chess!
> my blog is http://lbz.blog.51cto.com
> our site is http://www.etiantian.org
> my qq num is 49000448.
>
> not 4900000448.
> my god ,i am not lez,but LBZ!
> EOF

[root@lbz01 ~]# grep "." ~/lbz_test.txt (-o)                      1. .符号
#. 匹配任意一个字符,且只有一个字符(-o显示匹配过程)
I am lbz teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://lbz.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not lez,but LBZ!
[root@lbz01 ~]# grep "0*" ~/lbz_test.txt                          2. *符号
#匹配前一个字符连续出现了0次或者多次
I am lbz teacher!
I teach linux.

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

not 4900000448.
my god ,i am not lez,but LBZ!
[root@lbz01 ~]# grep "^m.*m$" ~/lbz_test.txt                      3. .*点星结合
# .* 匹配任意所有信息
my blog is http://lbz.blog.51cto.com
[root@lbz01 ~]# grep "^m.*o" ~/lbz_test.txt                       //贪婪匹配
my blog is http://lbz.blog.51cto.com
my god ,i am not lez,but LBZ!
[root@lbz01 ~]# grep "^m.*to" ~/lbz_test.txt                      //指定具体信息阻止贪婪匹配
my blog is http://lbz.blog.51cto.com
[root@lbz01 ~]# echo -e "lbz01\nlbz02\nlbz03"                     4. \转义符号
\作用:
01. 将有特殊意义符号,转义成普通信息进行识别
02. 将没有意义的信息转义为有特殊意义的信息
\n 换行符号
\t 制表符号
lbz01
lbz02
lbz03
[root@lbz01 ~]# grep ".$" lbz_test.txt                            //使用转义符号前
I am lbz teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://lbz.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not lez,but LBZ!
[root@lbz01 ~]# grep "\.$" lbz_test.txt                           //使用转义符号后
I teach linux.
my qq num is 49000448.
not 4900000448.
[root@lbz01 ~]# grep "l[be]z" lbz_test.txt                        5. []括号符号
#[] 匹配多个字符信息
I am lbz teacher!
my blog is http://lbz.blog.51cto.com
my god ,i am not lez,but LBZ!
[root@lbz01 ~]# grep "^[Im]" lbz_test.txt
I am lbz teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://lbz.blog.51cto.com
my qq num is 49000448.
my god ,i am not lez,but LBZ!
[root@lbz01 ~]# grep "[abc]" lbz_test.txt                          6. [^]括号和尖号组合
#[^] 排除符号
I am lbz teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://lbz.blog.51cto.com
our site is http://www.etiantian.org
my god ,i am not lez,but LBZ!
[root@lbz01 ~]# grep "[^abc]" lbz_test.txt
I am lbz teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://lbz.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not lez,but LBZ!

2.扩展正则符号

extended regular expression ERE

//扩展正则符号
默认 grep sed不能直接识别
grep 提升自己 -- egrep/grep -E 
sed 提升自己 -- sed -r 
1. +号符号:+
2. 竖线符号:|
3. 括号符号:()
4. 括号符号:{}
5. 问号符号:?
1. +号符号:+
[root@lbz01 ~]# cat lbz_test.txt                                         //实验环境
I am lbz teacher!
I teach linux.

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

not 4900000448.
my god ,i am not lez,but LBZ!

[root@lbz01 ~]# egrep "0+" lbz_test.txt                                  1.+号符号
#+:匹配前一个字符连续出现了1次或者多次 
my qq num is 49000448.
not 4900000448.
[root@lbz01 ~]# egrep "0+" lbz_test.txt -o
000
00[root@lbz01 ~]# grep -Ev "0+" lbz_test.txt                            //排除内容
I am lbz teacher!
I teach linux.

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

my god ,i am not lez,but LBZ!
000
2. 竖线符号:|
[root@lbz01 ~]# grep -E "lbz|lez" lbz_test.txt                          2. 竖线符号:|
#|:并且符号,用于匹配多个信息
I am lbz teacher!
my blog is http://lbz.blog.51cto.com
my god ,i am not lez,but LBZ!
3. 括号符号:()
[root@lbz01 ~]# grep -E "l(be)z" lbz_test.txt                           3. 括号符号:()
#():指定信息进行整体匹配
[root@lbz01 ~]# grep -E "l(b|e)z" lbz_test.txt
I am lbz teacher!
my blog is http://lbz.blog.51cto.com
my god ,i am not lez,but LBZ!
#():进行后项引用前项使用: sed命令替换功能
[root@lbz01 ~]# echo lbz{01..10}|xargs -n 1|sed -r 's#(.*)#useradd\1#g'
useraddlbz01
useraddlbz02
useraddlbz03
useraddlbz04
useraddlbz05
useraddlbz06
useraddlbz07
useraddlbz08
useraddlbz09
useraddlbz10
[root@lbz01 ~]# seq -w 10|sed -r 's#(.*)#useradd lbz\1;echo 123456|passwd --stdin lbz\1#g'
//批量创建用户 lbz01..lbz10,并给每个用户设置密码信息,默认初始化密码(123456)
useradd lbz01;echo 123456|passwd --stdin lbz01
useradd lbz02;echo 123456|passwd --stdin lbz02
useradd lbz03;echo 123456|passwd --stdin lbz03
useradd lbz04;echo 123456|passwd --stdin lbz04
useradd lbz05;echo 123456|passwd --stdin lbz05
useradd lbz06;echo 123456|passwd --stdin lbz06
useradd lbz07;echo 123456|passwd --stdin lbz07
useradd lbz08;echo 123456|passwd --stdin lbz08
useradd lbz09;echo 123456|passwd --stdin lbz09
useradd lbz10;echo 123456|passwd --stdin lbz10
[root@lbz01 ~]# echo 123456|sed -r 's#([1-6]+)#<\1>#g' 
//将输出的信息echo 123456 ==> 转换为 <123456>进行显示            
<123456>
[root@lbz01 ~]# echo 123456|sed -r 's#(12)(34)(56)#<\1><\2><\3>#g'
#echo 123456 ==> 转换为 <12><34><56>进行显示
<12><34><56>
[root@lbz01 ~]# echo 123456|sed -r 's#(12)(34)(56)#<\1><><\3>#g'
<12><><56>
[root@lbz01 ~]# echo 123456|sed -r 's#(12)(34)(56)#<\1><\3><\3>#g'
<12><56><56>
[root@lbz01 ~]# echo 123456|sed -r 's#(..)(..)(..)#<\1><\2><\3>#g'
<12><34><56>
4. 括号符号:{}
#可以指定字符连续匹配的次数                                               4.括号符号:{}                                            
[root@lbz01 ~]# grep -E "0{2,3}" lbz_test.txt
#第一种情况: x{n,m} 表示前一个字符至少连续出现n次,最多出现m次
my qq num is 49000448.
not 4900000448.
[root@lbz01 ~]# grep -E "0{2,3}" lbz_test.txt -o
000
000
00
[root@lbz01 ~]# grep -E "0{2}" lbz_test.txt
#第二种情况: x{n} 表示前一个字符正好连续出现了n次
my qq num is 49000448.
not 4900000448.
[root@lbz01 ~]# grep -E "0{2}" lbz_test.txt -o
00
00
00
[root@lbz01 ~]# grep -E "0{2,}" lbz_test.txt
#第三种情况: x{n,} 表示前一个字符至少连续出现n次,最多出现多少次不限
my qq num is 49000448.
not 4900000448.
[root@lbz01 ~]# grep -E "0{2,}" lbz_test.txt -o
000
00000
[root@lbz01 ~]# grep -E "0{,2}" lbz_test.txt
#第四种情况: x{,m} 表示前一个字符至少连续出现0次,最多出现m次
I am lbz teacher!
I teach linux.
[root@lbz01 ~]# grep -E "0{,2}" lbz_test.txt -o
00
0
00
00
0
5. 问号符号:?
定义匹配前一个字符出现0或者1次                                           5.问号符号:?
[root@lbz01 ~]# cat >>lbz_test03.txt<<EOF                           //创建测试环境
> gd
> god
> good
> goood
> gooood
> EOF
[root@lbz01 ~]# egrep "o?" lbz_test03.txt
gd
god
good
goood
gooood
[root@lbz01 ~]# egrep "o?" lbz_test03.txt -o
o
o
o
o
o
o
o
o
o
o
补充:想让grep sed命令可以直接识别扩展正则
[root@lbz01 ~]# grep "o\+" lbz_test03.txt
god
good
goood
gooood
[root@lbz01 ~]# echo 123456|sed "s#\(..\)\(..\)\(..\)#<\1><\2><\3>#g"
<12><34><56>
//区分:
* 匹配前一个字符出现0次或者多次
+ 匹配前一个字符出现1次或者多次
{} 匹配前一个字符指定出现多少次,至少0次
? 匹配前一个字符出现0次或者1次

补充:利用ip address show eth0只把IP地址信息显示出来
[root@lbz01 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UPgroup default qlen 1000
    link/ether 00:0c:29:9b:9b:9c 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::f36b:6d73:ec43:617c/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@lbz01 ~]# 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@lbz01 ~]# ip a s eth0|grep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
[root@lbz01 ~]# 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@lbz01 ~]# 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@lbz01 ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o
10.0.0.200
10.0.0.255
[root@lbz01 ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o|head -1
10.0.0.200
[root@lbz01 ~]# ip a s eth0|egrep "([0-9]+\.)"
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@lbz01 ~]# ip a s eth0|egrep "([0-9]+\.)" -o
10.
0.
0.
10.
0.
0.
[root@lbz01 ~]# ip a s eth0|egrep "([0-9]+\.){3}[0-9]+" -o
10.0.0.200
10.0.0.255
[root@lbz01 ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o
1500
1000
10.0.0.200
10.0.0.255
[root@lbz01 ~]# ip a s eth0|egrep "([0-9]+\.?){4}"
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UPgroup default qlen 1000
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@lbz01 ~]# ip a s eth0|egrep "([0-9]+\.?){4}"|head -3
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UPgroup default qlen 1000
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@lbz01 ~]# ip a s eth0|egrep "([0-9]+\.?){4}"|head -3|tail -1
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@lbz01 ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o|head -3|tail -1
10.0.0.200

问题及反思

实验环境:
[root@lbz01 ~]# cat lbz_test.txt
I am $lbz teacher!
I \teach \linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://lbz.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not lez,but LBZ!
01. 文件中有\撬棍信息,如何进行过滤
[root@lbz01 ~]# grep '\' lbz_test.txt
grep: Trailing backslash
[root@lbz01 ~]# grep '\\' lbz_test.txt
I \teach \linux.
02. 文件中有$符号, 是识别变量, 还是识别普通符号
[root@lbz01 ~]# grep '$lbz' lbz_test.txt
I am $lbz teacher!
[root@lbz01 ~]# grep '\$lbz' lbz_test.txt
I am $lbz teacher!

总结:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值