Linux学习

[Linux](十一) --基础正则表达式学习

2019-01-14  本文已影响2人  你就像只铁甲小宝

今天先不学习bash了,想学习一下正则表达式,就是这么任性。
以前也学过一点正则表达式,不过发现不用真的很容易忘,所以写一篇博客加深印象!!

正则表达式分,基础正则表达式,和扩展正则表达式。


语系对正则表达式的影响

在学习我了解到一个知识点,原来语系对正则表达式是有影响的。
比如:

  • LANG = C时,01234....ABCD...Zabcd..z
  • LANG = zh_CN时,01234..aAbBcCdD..zZ
    当我们使用[a-z]在LANG=C中只有小写字母,但在LANG=zh_CN中发现大写字母也在里面。

所以我么使用正则表达式时,要注意环境的语系!

1.基础正则表达式、

用法:

特殊符号 代表意义
[:alnum:] 0-9,A-Z,a-z
[:alpha:] A-Z,a-z
[:black:] 代表空格键和tab键
[:cntrl:] 键盘上的控制按键
[:digit:] 0-9
[:graph:] 除了空格键和tab键外的其他所有按键
[:lower:] a-z
[:print:] 可以被打印出来的字符
[:upper:] A-Z
[:space:] 任何会产生空格的按键
[:xdigit:] 十六进制的数字类型,0-9,A-F,a-f

练习:使用grep命令来练习。

首先需要一个文件,我使用的是col命令的说明书。
man col > col.man

图片.png

例子1.找到所有含有数字的行,然后列出前三行。

grep -n '[0-9]' col.man | head -n 3
或者这样写:
grep -n '[[:digit:]]' col.man | head -n 3

图片.png

例子2:找到st后面接一个字母的行,列出前三行。

grep -n 'st[a-z] col.man | head -n 3
或者grep -n 'st[[:lower:]] col.man | head -n 3

图片.png

例子3:找到不含大写字母的行,列出前三行。

grep -n '[^[:upper:]]' col.man | head -n 3

提醒:这里发现第一行明明有含有大写字母为什么还行呢?因为它虽然有大写,但它也有小写的字母啊。


例子4:找到开头是空格的行,列出前三行。

grep -n '^[[:space:]]' col.man | head -n 3

图片.png

可以发现^在[]内和外意思是不同的,[^]意思是反向选择的意思,^[]意思是行首的意思。

例子5:找到行尾是.的行,列出前三行。

grep -n '\.$' col.man | head -n 3

图片.png

$代表行尾的意思,这里因为.在正则中有其他意思,所以需要使用转义字符。

例子6:去除一个文本多余的空行。

grep -v '^$' col.man

^$比配所有的空白行,-v方向选择。

例子7:使用.号来匹配任意一个字符。

grep -n 'ES.' col.man

这里.匹配的是C这个字符。

例子8:使用*号来匹配重复的字符。

grep -n 'eee*' col.man

图片.png

*号意思是重复前面字符的0次或以上。
所以'eee*'的匹配的是ee,或者eee,eee....

例子9:使用限定范围符号{}。

grep -n 'fe\{2\}d' col.man

图片.png
  • 这里得使用\转义{},因为他们在bash有其他的意思。
  • {},代表了前面字符的范围,这里指的是e的范围是2个,不是2个以上了!
  • 若想要2个以上呢?可以加个逗号,{2,}
  • 指定一定范围,比如{2,5},2到5个前面的字符。

总结刚刚使用到的字符。

RE字符 意义
^word 待查找的字符串的行首
word$ 待查找的字符串的行尾
. 匹配一个任意一个字符
\ 转义字符
* 重复0个或以上前面的字符
[] 从中括号中选取想要的字符
{} 限定范围,规定前面字符的数量

现在感觉学起来不难,但感觉到时候一起结合起来应用的时候就有难度了...扩展正则表达式明天在学了。

上一篇 下一篇

猜你喜欢

热点阅读