目录
1.基础正规表示法
1.1 语系对正规表示法的影响
![](https://i-blog.csdnimg.cn/blog_migrate/45bb1d8deb151f71fc145b4244845996.png)
如上图,如果想撷取大写字符[A-Z],LANG=C语系会捕捉到所有大写字母,而LANG=zh_TW语系,会捕捉到除了所有大写字母外的小写字母b-z.所以使用正规表示法要注意环境的语系.另外,为了避免这样编码所造成的英文与数字的撷取问题,有如下特殊符号
1.2.grep的进阶选项
1.3 正规表示法基础
- 搜寻特定字符串直接在单引号中写
grep -n '关键字' 文件档名
反选选择 选项 -v - 利用中括号[]搜寻集合字符
grep -n 't[ea]st' 文件档名 搜寻带有test 或 tast 的行,注意只能取到[]中的一个 - 反向选择^
grep -n '[^ab]hhh' 文件档名 搜寻关键字'hhh'但是前边不能带a或者b
注意^在[]内,如果在[]外是另一个意思"字首符号" - 连续选择符号-
grep -n '[^a-z]hhh' 文件档名 搜寻不以小写字母开头并且后边连接"hhh"的行,也可以用下边的代替
grep -n '[^[:lower:]]hhh' 文件档名 - 行首符与行尾符^$
grep -n '^the' 文件档名 搜寻以"the"开头的行
grep -n '^[^a-z]' 文件档名 搜寻不以小写字符开头的行
grep -n '/.$' 文件档名 搜寻以"."结尾的行,"."需要用逃脱符\来解除它的特殊意义
grep -n '^$' 文件档名 搜寻空白行 - 任意一个字符『.』
grep -n 'g..d' 文件档名 搜寻g??d这样的关键字,如good,gaad,glad - 0到无穷次前一个字符*
grep -n 'go*d' 文件档名 搜寻g和d中间没有或者有n个o的关键字所在的行,如gd,god,good,goo……d
与通配符*意义完全不同 - 0个或多个任意字符『.*』
grep -n 'a.*b' 文件档名 搜寻行中含有ab的行,无论ab中间有多少个其他任意字符 - 连续限定字符范围 {}
grep -n '[a-z]/{1,5/}' 文件档名 搜寻1到5个小写字母所在的行
{和}是有特殊意义的字符,所以需要用逃脱符/
{}中间只有一个数字代表固定个个数
1.4 基础正规表示法字符汇整
1.5 sed工具
sed是管线命令,它可以撷取/删除/取代/新增数据,甚至可以修改源文件.
1.5.1 sed以行为单位的新增/删除功能
nl /etc/passwd | sed '2,5d'
删除文件的第二行到第五行,这里应该加上选项 -e ,不加也可以实现,但是有两个动作function时候必须加上-e.
sed后边的动作必须用单引号括起来
nl /etc/passwd | sed '2d' 只删除第二行
nl /etc/passwd | sed '2,$d' 删除第二行到最后一行,$代表最后一行
nl /etc/passwd | sed '2a 你好'
在第二行后边增加一行,如果是想在第二行前边增加,用 -i 参数
如果想插入两行,要用逃脱符\
nl /etc/passwd | sed '/^$/d'
删掉空白行
1.5.2 sed以行为单位的取代与显示功能
nl /etc/passwd | sed '2,5c 你好'
用字符取代第二行到第五行
nl /etc/passwd | sed -n '10,20p'
显示第10行到第20行,如果不加-n选项会将所有数据列出来,第10行到第20行再列出来一遍
1.5.3 sed部分数据的搜寻并取代的功能
与vi相当类似
sed 's/要被取代的字符串/新的字符串/g'
红色部分是这个语法的关键字.
1.5.4 sed直接修改文件内容
危险动作,修改源文件内容,加上-i选项(不是动作的参数,是命令的选项).
sed -i '1d' 文件档名 删除第一行
2 延伸正规表示法
延伸正规表示法多了一些特殊字符,还需要用支持延伸正规表示法的命令,如egrep 或 grep -E
3 文件格式化与相关处理
3.1 格式化打印:printf
3.2 awk 好用的数据处理工具
awk 是以行为一次处理单位,以字段为最小处理单位
awk后续所有动作都要在一对单引号内,awk是管线命令,它主要处理每一行的字段内的数据,而默认字段分割符是空格键或[tab]键
awk最常用的动作
last -n 5| awk '{print $1 "-" $2}'
$0代表一整行数据,$1代表分割后第一个字段,$2代表分割后第二个字段.....
3.2.1整个awk的处理流程
- 读入第一行,并将第一行的资料填入$0,$1,$2... 等变数中
- 依据条件类型限制,判断是否需要进行后边的动作
- 做完所有的动作与条件类型
- 若还有行,重复上边的动作,直到结束
3.2.2 awk的内建变量,必须大写,且不需要$
![](https://i-blog.csdnimg.cn/blog_migrate/cf59e6656d53229c4fe986c232f0da02.png)
3.2.3 awk的逻辑运算符
一个实用的例子:查看passwd文件中,用[:]分割字段,第三个字段长度小于10,并显示第一个字段和第三个字段
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 > 10 {print $1 " \t" $3}'
因为定义了FS,所以第二行才能生效.因此加上BEGIN