Linux其他TECH

4-19-3 Linux中的正则表达式 --- 位置锚定

2022-07-19  本文已影响0人  捌千里路雲和月

1、位置锚定:定位过滤条件的出现的位置。

2、常用参数:

3、实操练习:

①、^:行首锚定(最左侧)。

[root@localhost ~]# vim test.txt    ## 测试文档内容 

torres abc 123
abc torres 123
123 abc torres
torres torres torrres
                                                                               
~                                                                                                
~                                                                                                
~                                                                                                
:wq!    ## 保存退出

[root@localhost ~]# cat test.txt    ## test.txt 文件内容 
torres abc 123
abc torres 123
123 abc torres
torres torres torrres
[root@localhost ~]# 
                                 
^torres:列出行首字符串为 torres 的行

②、$:行尾锚定(最右侧)。

torres$:列出行尾字符串为 torres 的行

③、^$:空行。

[root@localhost ~]# vim test.txt 

torres abc 123
                        ## <---- 空行
abc torres 123
                        ## <---- 空行
123 abc torres
                        ## <---- 空行    
torres torres torrres                                                                          
~                                                                                                
~                                                                                                
~                                                                                                
:wq!    ## 保存并退出
[root@localhost ~]# 
[root@localhost ~]# cat -n test.txt    ## -n 带序号的显示 test.txt 文件内容,2 4 6 是空行。 
     1  torres abc 123
     2  
     3  abc torres 123
     4  
     5  123 abc torres
     6  
     7  torres torres torrres
[root@localhost ~]# 
[root@localhost ~]# grep -n "^$" test.txt    ## 带序号的过滤出 test.txt 文件的空行 
2:
4:
6:
[root@localhost ~]# 

[root@localhost ~]# cat -n test.txt    ## 2、4、6 是空行 
     1  torres abc 123
     2  
     3  abc torres 123
     4  
     5  123 abc torres
     6  
     7  torres torres torrres
[root@localhost ~]# 
[root@localhost ~]# grep -vn "^$" test.txt    ## 带序号过滤出不是空行的内容。 
1:torres abc 123
3:abc torres 123
5:123 abc torres
7:torres torres torrres
[root@localhost ~]# 


④、^[[:space:]]*$:空白字符行。空白字符行是指含由空格、tab组成的空白行。表面上看是空白行,实际上是有空格、tab这些空白字符。

[root@localhost ~]# vim test.txt 

torres abc 123
                        ## <---- 输入 4 个 空格 键 
abc torres 123
                        ## <---- 输入 2 个 tab 键 
123 abc torres
                        ## <---- 输入 2 个 tab 键 
torres torres torrres
                                                                                
~                                                                                                
~                                                                                                
~                                                                                                
:wq!    ## 保存退出


[root@localhost ~]# cat -A test.txt    ## cat -A 参数显示隐藏的符号字符
torres abc 123$
    $           ##<--- $ 是换行符,$ 前面的空白是空格
abc torres 123$
^I^I$           ##<--- ^I 是 tab 键,输入了多少次 tab 键就有多少个 ^I 
123 abc torres$
^I$
torres torres torrres$
[root@localhost ~]# 
[root@localhost ~]# cat test.txt     
torres abc 123
    
abc torres 123
        
123 abc torres
    
torres torres torrres
[root@localhost ~]# 
[root@localhost ~]# grep "^$" test.txt    ## "^$" 不能过滤额空格、tab 空白字符行
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# cat -An test.txt     
     1  torres abc 123$
     2      $          ## 空格
     3  abc torres 123$
     4  ^I^I$         ## 2 个 tab
     5  123 abc torres$
     6  ^I$          ## 1 个 tab
     7  torres torres torrres$
[root@localhost ~]# 
[root@localhost ~]# grep -n "^[[:blank:]]" test.txt    ##  过滤空白字符开头的行
2:    
4:      
6:  
[root@localhost ~]# 
[root@localhost ~]# grep -n "^[[:space:]]" test.txt    ##  过滤空白字符开头的行 
2:    
4:      
6:  
[root@localhost ~]# 

[root@localhost ~]# cat -An test.txt    ## -A 列出隐藏字段,n 列出序号 
     1  torres abc 123$
     2      $    ## 空格
     3  abc torres 123$
     4  ^I^I$    ## 2 个 tab
     5  123 abc torres$
     6  ^I$    ## 1 个 tab
     7  torres torres torrres$
[root@localhost ~]# 
[root@localhost ~]# grep -nv "^[[:blank:]]" test.txt    ## 过滤开头是空白字符的行。
1:torres abc 123
3:abc torres 123
5:123 abc torres
7:torres torres torrres
[root@localhost ~]# 
[root@localhost ~]# grep -nv "^[[:space:]]" test.txt    ## 过滤开头是空白字符的行。 
1:torres abc 123
3:abc torres 123
5:123 abc torres
7:torres torres torrres
[root@localhost ~]# 

[root@localhost ~]# vim test.txt    ## 编辑 test.txt 文件 
    ##<--- 回车(空白行)
torres abc 123

abc torres 123

123 abc torres

torres torres torrres
    ##<--- 回车(空白行)                                                                                     
~                                                                                                
~                                                                                                
~                                                                                                
:wq!

[root@localhost ~]# cat -An test.txt    ## 列出隐藏符号及行号 
     1  $    ## <--- 回车形成的空白行    
     2  torres abc 123$
     3      $
     4  abc torres 123$
     5  ^I^I$
     6  123 abc torres$
     7  ^I$
     8  torres torres torrres$
     9  $    ## <--- 回车形成的空白行    
[root@localhost ~]# 
[root@localhost ~]# grep -n "^[[:blank:]]" test.txt    ## [[:blank:]] 不能过滤 1、9 行内容。 
3:    
5:      
7:  
[root@localhost ~]# grep -n "^[[:space:]]" test.txt    ## [[:space:]] 不能过滤 1、9 行内容。  
3:    
5:      
7:  
[root@localhost ~]# 

[root@localhost ~]# cat -An test.txt 
     1  $
     2  torres abc 123$
     3      $
     4  abc torres 123$
     5  ^I^I$
     6  123 abc torres$
     7  ^I$
     8  torres torres torrres$
     9  $
[root@localhost ~]# grep -n "^[[:space:]]*$" test.txt    ## 匹配 test.txt 所有空白行
1:
3:    
5:      
7:  
9:
[root@localhost ~]# grep -n "^[[:blank:]]*$" test.txt    ## 匹配 test.txt 所有空白行 
1:
3:    
5:      
7:  
9:
[root@localhost ~]# 

[root@localhost ~]# cat -n test.txt 
     1  
     2  torres abc 123
     3      
     4  abc torres 123
     5          
     6  123 abc torres
     7      
     8  torres torres torrres
     9  
[root@localhost ~]# grep -nv "^[[:space:]]*$" test.txt 
2:torres abc 123
4:abc torres 123
6:123 abc torres
8:torres torres torrres
[root@localhost ~]# 
[root@localhost ~]# grep -nv "^[[:blank:]]*$" test.txt 
2:torres abc 123
4:abc torres 123
6:123 abc torres
8:torres torres torrres
[root@localhost ~]# 


[root@localhost ~]# vim test.txt 

apple
banana
cat
dog
ada
benny
carmen
devis
                                                                           
~                                                                                                
~                                                                                                
~                                                                                                
:wq

[root@localhost ~]# cat -n test.txt 
     1  apple    ## 词首是 a 的单词
     2  banana
     3  cat
     4  dog
     5  ada    ## 词首是 a 的单词
     6  benny
     7  carmen
     8  devis
[root@localhost ~]# grep -n "\<a" test.txt    ## 列出 test.txt 文档内词首为 a 的单词 
1:apple
5:ada


[root@localhost ~]# cat -n test.txt 
     1  apple
     2  banana    ## 词尾是 a 的单词
     3  cat
     4  dog
     5  ada    ## 词尾是 a 的单词
     6  benny
     7  carmen
     8  devis
[root@localhost ~]# 
[root@localhost ~]# grep -n "a\>" test.txt 
2:banana
5:ada
[root@localhost ~]# 

[root@localhost ~]# cat -n test.txt 
     1  apple
     2  banana
     3  cat
     4  dog
     5  ada
     6  benny
     7  carmen
     8  devis
[root@localhost ~]# 
[root@localhost ~]# grep -n "\<ada\>" test.txt 
5:ada
[root@localhost ~]# 

⑧、\b:边界符,既可以代表单词的词首也可以代表词尾。

[root@localhost ~]# cat -n test.txt 
     1  apple
     2  banana
     3  cat
     4  dog
     5  ada
     6  benny
     7  carmen
     8  devis
[root@localhost ~]# 
[root@localhost ~]# grep -n "\bca" test.txt    ## test.txt 文件中,左侧以 ca 开头的单词  
3:cat
7:carmen
[root@localhost ~]# 

效果图示,单词中以 ca 开头的的会标红
[root@localhost ~]# cat -n test.txt 
     1  apple
     2  banana
     3  cat
     4  dog
     5  ada
     6  benny
     7  carmen
     8  devis
[root@localhost ~]# 
[root@localhost ~]# grep -n "men\b" test.txt    ## test.txt 文件中,右侧以 men 结尾的单词    
7:carmen
[root@localhost ~]# 

效果图示,单词中有 men 结尾的会标红
[root@localhost ~]# cat -n test.txt 
     1  apple
     2  banana
     3  cat
     4  dog
     5  ada
     6  benny
     7  carmen
     8  devis
[root@localhost ~]# grep -n "\bcarmen\b" test.txt     ## test.txt 文件中精确匹配 carmen 这个单词     
7:carmen
[root@localhost ~]# 

效果图示,精确匹配的单词会标红
[root@localhost ~]# cat -n test.txt 
     1  apple 
     2  banana
     3  cat
     4  dog
     5  ada
     6  benny
     7  carmen
     8  devis
[root@localhost ~]# grep -w "cat" test.txt    ## grep 用 -w 参数在 test.txt 中精确匹配 cat 这个单词 
cat

效果图示,精确匹配的单词会标红
上一篇下一篇

猜你喜欢

热点阅读