Linux学习(2)- 正则表达式基础

Linux学习(2)- 正则表达式基础

一、基础正则表达式介绍与练习

学习内容

  • 正则表达式特殊符号
[:alnum:]代表英文大小写字母及数字 
[:alpha:]代表英文大小写字母
[:blank:]代表空格和 tab 键
[:cntrl:]键盘上的控制按键,如 CR,LF,TAB,DEL
[:digit:]代表数字
[:graph:]代表空白字符以外的其他
[:lower:]小写字母
[:print:]可以被打印出来的任何字符
[:punct:]代表标点符号
[:upper:]代表大写字符
[:space:]任何会产生空白的字符如空格,tab,CR 等
[:xdigit:]代表 16 进位的数字类型

作业

  • 使用```

grep -n '[(上面的内容)]' XXX.txt


![](http://images2015.cnblogs.com/blog/830327/201706/830327-20170628102432321-2090522561.png)


## 二、[grep 命令与正则表达式](https://www.shiyanlou.com/courses/90/labs/780/document)

- 实验文档讲解的已经十分清楚,若有记得不清楚的直接查看即可,所以直接链接,博客里就摘抄一下总结。

总结:
^word 表示带搜寻的字符串(word)在行首

word$ 表示带搜寻的字符串(word)在行尾

.(小数点) 表示 1 个任意字符

表示转义字符,在特殊字符前加会将特殊字符意义去除

  •    表示重复 0 到无穷多个前一个 RE(正则表达式)字符
    

[list] 表示搜索含有 l,i,s,t 任意字符的字符串

[n1-n2] 表示搜索指定的字符串范围,例如[0-9] [a-z] [A-Z]等

[^list] 表示反向字符串的范围,例如[0-9]表示非数字字符,[A-Z]表示非大写字符范围

{n,m} 表示找出 n 到 m 个前一个 RE 字符

{n,} 表示 n 个以上的前一个 RE 字符


参数说明:

-a :将 binary 档案以 text 档案的方式搜寻数据

-c :计算找到 '搜寻字符串' 的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

### 作业

- 使用-n和不使用的区别

![](http://images2015.cnblogs.com/blog/830327/201706/830327-20170628102450696-1766708683.png)

- 一些练习:

![](http://images2015.cnblogs.com/blog/830327/201706/830327-20170628102746821-1603049102.png)

![](http://images2015.cnblogs.com/blog/830327/201706/830327-20170628102748477-365529227.png)


## 三、[正则表达式运用之 sed 工具命令](https://www.shiyanlou.com/courses/90/labs/781/document)

在iterm中```
nl regular_express.txt | sed '2a hello
20155205'
```会出错

![](http://images2015.cnblogs.com/blog/830327/201706/830327-20170628104957539-740657807.png)

但是```
nl regular_express.txt | sed '2d'
```却是正确的

![](http://images2015.cnblogs.com/blog/830327/201706/830327-20170628104959664-366417462.png)

查找了很多,还是不会怎么弄。。。

- 总结了一下感觉还是要自己多用多练才能熟练,此外因为我的事mac系统,所以有些命令和实验楼讲的不一样,自己也要多摸索。

## 参考资料

- [Shell正则表达式之grep、sed、awk实操笔记](http://www.jb51.net/article/54961.htm)
- [sed命令](http://man.linuxde.net/sed)
原文地址:https://www.cnblogs.com/haoliberale/p/7088799.html