Linux学习----grep及正则表达式

grep: Global Reaserch

根据模式,搜索文本,并将符合模式的文本行显示出来。
还有egrep、fgrep

模式:Pattern  文本字符和正则表达式的元字符组合而成的匹配条件。

NAME
       grep, egrep, fgrep - print lines matching a pattern


SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]


[root@localhost ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

-i : --ignore-case   忽略大小写
--colour[=WHEN] : 匹配到的内容加上颜色显示
-v :反向查找。被模式匹配到的行不显示,显示没有被匹配到的行。
-o:只显示被匹配到的字符串
[root@localhost ~]# grep 'root' /etc/passwd -o
root
root
root
root

*:任意长度的任意字符
?:任意单个字符
[]: 范围
[^]:


正则表达式:Regular EXPression

默认情况下,正则表达式工作在贪婪模式下----尽可能长的匹配。
元字符:
    . :任意单个字符
[root@localhost ~]# grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/va<span style="color:#ff0000;">r/ft</span>p:/sbin/nologin
    []: 匹配指定范围内的任意单个字符
    [^]:匹配指定范围外的任意单个字符
            字符集和:[:digit:]    [:lower:]  [:upper:]   [:space:]  


字符次数:
    * :匹配其前面的字符任意次
   .*:任意长度,任意字符

 \? :匹配其前面的字符一次或0次
[root@localhost test]# grep 'a\?b' test
<span style="color:#ff0000;">ab
b</span>
aa<span style="color:#ff0000;">ab</span>
amn<span style="color:#ff0000;">b</span>
ad<span style="color:#ff0000;">b</span>

\{m,n\} :匹配之前的字符至少m次,至多n次
[root@localhost test]# grep 'a\{1,3\}b' test
ab
aaab

[root@localhost test]# grep 'a.\{1,3\}b' test
aaab
amnb
adb

位置锚定:
^: 锚定行首。此字符后面的任意内容必须出现在行首
[root@localhost test]# grep '^r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash

$:锚定行尾。此字符前面的任意内容必须出现在行尾
[root@localhost test]# grep '3$' /etc/inittab 
# multi-user.target: analogous to runlevel 3
^$: 空白行
[root@localhost test]# grep '[[:digit:]]$' /etc/inittab 
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5

锚定词首:
\< 或\b:其后面的任意字符必须作为单词的首部出现
\> 或\b:其前面的任意字符必须作为单词的尾部出现

\<root\> 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

分组:
\(\): 将内容分组
     \(ab\)*:ab匹配的次数
    后向引用。分组内容可以在后续用一个字符继续引用。
    \1: 调用前面第一个左括号以及与之对应的右括号所包括的所有内容
[root@localhost test]# grep 'l..e' t2.txt 
He love his lover.
She like her liker.
He like his lover.

[root@localhost test]# grep '\(l..e\).*\1' t2.txt 
He love his lover.
She like her liker.



扩展正则表达式:Extended REGEXP

grep  -E  使用扩展正则表达式
          -A  n:显示匹配到的一行,及之后的n行
          
[root@localhost ~]# grep  -A 2 '^core id' /proc/cpuinfo 
core id		: 0
cpu cores	: 2
apicid		: 0
--
core id		: 1
cpu cores	: 2
apicid		: 1
--
core id		: 0
cpu cores	: 2
apicid		: 2
--
core id		: 1
cpu cores	: 2
apicid		: 3

       -B n: 及其之前的n行
       -C n: 及其前后各n行

扩展正则表达式:
字符匹配:
.
[]
[^]

次数匹配:
?
+:其前面的字符至少一次
{m,n}

位置锚定:
^
$
\<
\>

分组:
()
\1,\2.....

或者:
|: or  或者
      
[root@localhost ~]# grep -E 'C|cat' t3.txt 
<span style="color:#ff0000;">cat</span>
<span style="color:#ff0000;">C</span>at
<span style="color:#ff0000;">C</span>
China

[root@localhost ~]# grep -E '(C|c)at' t3.txt 
cat
Cat

[root@localhost ~]# ifconfig | egrep '\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b'
        inet <span style="color:#ff0000;">192</span>.<span style="color:#ff0000;">168</span>.<span style="color:#ff0000;">1</span>.<span style="color:#ff0000;">70</span>  netmask <span style="color:#ff0000;">255</span>.<span style="color:#ff0000;">255</span>.<span style="color:#ff0000;">255</span>.0  broadcast <span style="color:#ff0000;">192.168.1.255
</span>        inet6 fe80::20c:29ff:fe0c:4888  prefixlen <span style="color:#ff0000;">64</span>  scopeid 0x20<link>
        ether 00:0c:29:0c:<span style="color:#ff0000;">48:88</span>  txqueuelen 1000  (Ethernet)
        RX packets 23044  bytes 1640772 (<span style="color:#ff0000;">1.5</span> MiB)
        TX packets 5501  bytes 962523 (939.<span style="color:#ff0000;">9</span> KiB)

[root@localhost ~]# ifconfig | egrep  '(\b([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\.){3}\b([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b'
        inet <span style="color:#ff0000;">192.168.1.70</span>  netmask <span style="color:#ff0000;">255.255.255.0</span>  broadcast <span style="color:#ff0000;">192.168.1.255</span>
        inet <span style="color:#ff0000;">127.0.0.1</span>  netmask <span style="color:#ff0000;">255.0.0.0</span>
        inet <span style="color:#ff0000;">192.168.122.1</span>  netmask 255.255.255.0  broadcast <span style="color:#ff0000;">192.168.122.255</span>



fgrep:fast  不支持正则表达式




























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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值