linux 已经学了一段时间了,突然发现都没有正儿八经的写过学习笔记,罪过,罪过啊!那就从现在开始吧!
现在正在啃“鸟哥的linux私房菜”,现在的进度是shell部分基本看完,马上转入正则表达式的学习,所以笔记就先从这里开始写吧,如果在学习的过程中看到一些比较重要的命令,会记录在LINUX学习笔记_history------命令中的。
NO 1. 正则表达式
1.1 什么是正则表达式
1.1.1 概念
正则表达式基本上是一种“表示法”,只要工具程序支持这种表示方法,那么该工具程序就可以用来作为正则表达式的字符串处理之用。eg:vi,grep,awk,sed 等(cp,ls不支持)
1.2 基础正则表达式
1.2.1 基本用法
1)正则表达式中的特殊符号 [:alnum:] [:alpha:] [:upper:] [:lower:] [:digit:]
2)行首与行尾字符 “^ $”
3)查找空白行 grep -n '^$' filename
4)任意字符“.”与重复字符"*","."代表一定有一个字符,“*”代表重复前一个字符0到无穷多次,要和别的字符组合使用
5)限定连续RE字符范围{},因为{}在shell中有特殊意义,所以要用\转意。eg:查找regular_express.txt文件中有"oo"的字符串
grep -n 'o\{2\}' regular_express.txt,如果是查找有2-5个o的字符串,则grep -n 'o\{2,5\}'regular_express.txt
1.2. 2 sed工具 p357
1)以行为单位的新增/删除功能 nl /etc/passwd | sed '2,5d' <-----将passwd的内容带行号列出,并删除2,5行,d代表删除
nl /etc/passwd | sed '2a drink tea' <----在第2行后加上drink tea(要另外开辟一行,及drink tea 加在 了第3 行),a代表添加,若想加在第2行前,则将a换成i,若想添加多行,则
nl /etc/passwd | sed '2i helloshell \
> hello world '
需要将添加的数据按行分开
2)以行为单位的整行替换与显示功能
nl /etc/passwd | sed '2,5c No 2-5 number' <-----将2~5行的内容替换为“No 2-5 number”
nl /etc/passwd | sed -n '5,7p' <-----仅列出passwd文件内5-7行的数据
*部分数据的查找并替换功能
sed 's/要被替换的部分/新的字符串/g'
3)直接修改文件
sed -i '$a #this is a test' regular_express.txt <------在regular_express.txt最后一行加入“#this is a test”
4)sed后面接多个命令时,要用-e选项
eg:cat /etc/passwd | sed -e '4d' -e '6c no six line'
1.3拓展正则表达式
掌握拓展表达式的特殊字符
+:重复一个或一个以上的前一个RE字符
?:零个或一个的前一个RE字符
|:用or的方式找出字符串
():找出组字符串
()+ :多个重复组的判别
awk数据处理工具 awk '条件类型1{动作1} 条件类型2{动作2}...' filename -----P363