欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一天一个shell_2_grep用法

程序员文章站 2022-03-11 11:42:23
...

1.基础

^

锚定行的开始 如:'^grep'匹配所有以grep开头的行。

$

锚定行的结束 如:'grep$'匹配所有以grep结尾的行。

.

匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。

*

匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[]

匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

[^]

匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

\(..\)

标记匹配字符,如'\(love\)',love被标记为1。

\<

锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。

\>

锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。

x\{m\}

重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。

x\{m,\}

重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。

x\{m,n\}

重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。

\w

匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

\W

\w的反置形式,匹配一个或多个非单词字符,如点号句号等。

\b

单词锁定符,如: '\bgrep\b'只匹配grep。

 ---------------------------------------------

 

 

2. 零宽断言

(?=exp)

 

也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp

比如

\b\w+(?=ing\b)

 

,匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。

-------------------------

 

(?<=exp)

 

 

也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如

(?<=\bre)\w+\b

 

会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

 

--------------------------

\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的单词。但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。这是因为[^u]总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w*\b将会匹配下一个单词,于是\b\w*q[^u]\w*\b就能匹配整个Iraq fighting负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。现在,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b。
零宽度负预测先行断言
(?!exp)
断言此位置的后面不能匹配表达式exp。例如:
\d{3}(?!\d)
匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。
同理,我们可以用
(?<!exp)
 
零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。
应用
cat "$1" | grep -Po "(?<=^${name}=).*$" 
 零宽断言里面长度要一定
cat "$1" | grep -Po "(?<=^${name}.*=).*$" //出错
 
grep来判断字符串是否包含
 echo "$temp" | grep -q ":"
    if [ $? -ne 0 ]; then
        echo "$temp : can not detect port, add default '80' "
        temp="${temp}:80"
    fi
 
interface=("url.interface.keyword" "url.interface.meta.incremental" "url.interface.meta.total" "url.interface.meta.urgent" "url.interface.vt.time" "url.interface.colander.admin.hostingsite" "url.colanderKeywordSync")
for name in "${interface[@]}";do
 
 
 
 
相关标签: grep