`

一天一个shell_2_grep用法

阅读更多

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
 
 
 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics