linux之基础符号详解(下)

199 阅读5分钟

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

1.测验:

	   01.将输出的123456  --- <123456>
	   echo 123456 |sed -r 's#(.*)#<\1> #g'
	   02.将输出的123456  --- <123><456>
	   [root@fu ~]# echo 123456 |sed -r 's#(123)(456)#<\1><\2> #g'
        <123><456>
	   03.将输出的123456  --- <12><34><56>
	   [root@fu ~]# echo 123456 |sed -r 's#(12)(34)(56)#<\1><\2><\3> #g'
        <12><34><56> 

	   04.将输出的123456  --- <56><12><34>
	   [root@fu ~]# echo 123456 |sed -r 's#(12)(34)(56)#<\3><\1><\2> #g'
       <56><12><34> 

2.{} --- 指定前面一个字符连续出现了多少次,可以更加灵活的指定 {n,m} --- 指定前面一个字符连续至少出现n次,最多连续出现了m次

  {}  --- 指定前面一个字符连续出现正好n次
  [root@fu ~]# egrep '0{2}' oldboy.txt 
  my qq num is 49000448
  not 4900000448
  [root@fu ~]# egrep '0{2}' oldboy.txt -o
  00
  00
  00

  {n,} --- 指定前面一个字符连续出现正好n次,最多出现多少次没有限制
  [root@fu ~]# egrep '0{1,}' oldboy.txt 
  my qq num is 49000448
  not 4900000448
  [root@fu ~]# egrep '0{1,}' oldboy.txt  -o
  000
  00000

  {,4}  --指定前面一个字符连续出现次数不限,最多出现4次
  
 [root@fu ~]# egrep '0{,4}' oldboy.txt  -o
 000
 0000
 0
 [root@fu ~]# egrep '0{,4}' oldboy.txt  
 
 I am oldboy teacher!

3. 匹配前一个字符0次或者1次

总结匹配前一个字符次数 --- 匹配 0次 或者 1次

[root@fu ~]# egrep 'go?d' oldboy_test.txt  
gd

*      --- 匹配 0次 或者 1次 或者 多次
[root@fu ~]# egrep 'go*d' oldboy_test.txt  
gd
good
goood
goooood

+      --- 匹配 1次 或者 多次
[root@fu ~]# egrep 'go+d' oldboy_test.txt  
good
goood
goooood

{n,m}  --- 至少匹配n次最多m次
[root@fu ~]# egrep 'go{3,10}d' oldboy_test.txt  
goood
goooood

{n}    --- n次
[root@fu ~]# egrep 'go{3}d' oldboy_test.txt  
goood


总结:括号家族系列总结 [] 作用:指定多个要匹配的字符信息 a b c 0 9 中括号中的每一个字符==元素 [0-9] [a-z] [A-Z] () 作用:将分散字符汇总成一个整体,进行匹配 I am o (ld)boy sed命令指定一个整体信息,利用sed的替换能力,实现后项引用前项 {} 作用: 01.通配符:做为一个序列符号使用{1..10} {1,3,5} {1,2}{3,4} 02.扩展正则:更加灵活的匹配前一个字符连续出现的次数 {n,m} {n} {n,}{,m}

终极总结:引号说明

''   所见即所得
""   类似单引号,有些符号信息会被解析 ! $ 环境变量名称 $()
没有引号  类似于双引号,但是可以支持通配符号 {1..10}
[root@fu ~]# echo "`hostname` $(LANG) $(pwd) {1..3}"
-bash: LANG: command not found
fu  /root {1..3}
[root@fu ~]# echo `hostname` $(LANG) $(pwd) {1..3}
-bash: LANG: command not found
fu /root 1 2 3


`` 执行命令,把命令执行结果交给外面命令进行处理

正则使用常见的问题:

1) 匹配一行从头到m字符的信息
   grep '^.*m' oldboy.txt
   贪婪特性:默认都是从左(开头)到右开始
 
2) ^d和*d之间的区别
   正则符号:用于匹配文件内容信息 grep sed awk
   通配符号:用于匹配文件名称信息 find ls 

正则符号学习与帮助方法

利用手册: man grep/sed/awk
         info grep/sed/awk(更加详细)
官方资料:http://www.gnu.org/software/grep/manual/
 
正则表达式特性说明
1)正则表达式具有贪婪匹配特性

终极目标一:

oldboy.txt
赵 11010519906096418110105198060964181101199860609641811011019860609641x
冯 oldboy
魏 oldgirl

[root@fu ~]# vim oldgirl
[root@fu ~]# egrep "[0-9]+" oldgirl11010519906096418110105198060964181101199860609641811011019860609641x

终极目标二:模拟在一个文件中写入一个电话号码

如果不是电话号码,就进行报错提示提示"格式不正确"
如果是电话号码,就提示输入正确

[root@fu ~]# echo 100000000000 >check_number.txt
[root@fu ~]# egrep '[0-9]+' check_number.txt 
100000000000
[root@fu ~]# echo adadda >check_number.txt
[root@fu ~]# egrep '[0-9]+' check_number.txt 
[root@fu ~]# egrep '[0-9]+' check_number.txt && echo "input"|| echo "fromat error"
fromat error
[root@fu ~]# echo 100000000000 >check_number.txt
[root@fu ~]# egrep '[0-9]+' check_number.txt && echo "input"|| echo "fromat error"
100000000000
input

基础正则表达式符号分类说明:

^    尖角符号    描述 表示搜索出以什么字符开头的行信息
                 实践 #grep "^m" oldboy.txt

$    美元符号    描述 表示搜索出以什么字符结尾的行信息
                 实践 #grep "m$" oldboy.txt
				 
^$   空行符号    描述  表示搜索出空行信息;表示把空行排除
                 实践 #grep -n "^$" oldboy.txt
				 
.    单点符号    描述  代表且只能代表一个字符/文本/符号(不匹配空行)
                       会进行贪婪匹配
                 实践 #grep -n "^$" oldboy.txt
				 
\    转义符号    描述  转义符号/符号,让有特殊含义的字符脱掉马甲,显出原形
                      转义符号/符号,让有特殊含义的字符穿上马甲,变化妆容
			     实践  \n   匹配一个换行符
				       \b   单词边界,\bcool\b 匹配cool,不匹配 coolant
					   \r   匹配回车
					   \t   匹配一个横向制表符
					   
*    星号符号    描述  重复之前的一个文本或字符连续出现0个或多个
                  实践 #grep "o*" oldboy.txt
				  
.*   点星符号    描述   匹配所有字符/文本,包含空行信息
                        ^.*以任意多个字符开头:.*4 以任意多个字符结尾
				  实践  #grep ".*" oldboy.txt
				  
正则符号
                 实践  #grep "^.*o" oldboy.txt
.^$   组合符号   描述  表示从一行什么位置开头到结束的内容都过滤出来
                 实践  #grep "m.*$" oldboy.txt
				 
[]    括号符号   描述  匹配字符集合的任意一个字符,例如[abc],表示a或b或c;
                       [a-z]  匹配所有小写字母
					   [A-Z]  匹配所有大写字母
					   [0-9]  匹配所有数字字符