linux100day(day4)--文本处理三剑客
在介绍三剑客之前,先来认识一下通配符和正则表达式
通配符
正则表达式
作用:通过一些特殊字符,来表示一类字符内容
1、字符匹配
. 任意一个字符
[ ] 范围内的任意一个字符
[^ ] 取反
字符类 [:digit:] [:alnum:] [:alpha:] [:lower:] [:upper:] [:space:] [:punct:]
2、次数匹配
* 匹配前面的字符0次到多次
? 匹配前面的字符0次到1次
+ 匹配前面的字符1次到多次
3、位置锚定
^ 锚定行首
$ 锚定行尾
\b 锚定词首和锚定词尾
\> 锚定词尾
\< 锚定词首
<\root\> 匹配root单词
\{m\} 匹配前面的字符m次
\{m,n\} 匹配前面的字符m到n次
4、分组
\(\)
分组特性:默认清空下,linux系统下回为分组指定变量,变量表示形式\1 \2 \3
day4--文本处理三剑客awk,sed,grep
三剑客用法非常灵活强大,需要在练习中慢慢体会,遂以练习为主。
awk(报告生成器)
awk作为三剑客的老大,擅长于取列,主要用来做文本输出格式化
awk在处理文件时是逐行处理的
在awk中,全部行称为$0,第一个字段称为$1,第二个字段称为$2……
NR为行号,NF表示最后一行
BEGIN表示最开始执行,END表示最末尾执行,因为这种特性,BEGIN常常用来赋值
awk [选项] [处理命令(脚本)] [文件]
awk -F 指定输入文件折分隔符 awk -v 赋值一个用户定义变量 awk -f 从脚本文件中读取awk命令
例1、输出/etc/passwd第一行的第一个域
例2、打印出/etc/passwd的第3个域和第5个域
例3、匹配/var/log/message中,带有erro关键字的相关信息
例4、输出/etc/passwd中文件名,行数,列数,和整行信息
awk -F ':' '{print FILENAME, NR , NF ,$0}' /etc/passwd
例5、使用冒号分隔符,查询最后一列
例6、使用awk输出第一块网卡的ip地址
sed(流处理器)
sed作为三剑客的老二,擅长取行,替换和数据搜寻
sed [选项] [脚本] [文件]
sed -e 以选项中指定的脚本来处理输入结果 sed -f 以选项中指定的脚本文件来处理输入结果 sed -n 只显示处理后结果
sed -i 替换
例1、查看/etc/passwd5-10行
这个p代表print打印,同理,d代表delete删除
例2、搜寻/etc/passwd中有root关键字的行
例3、新建一个文件,并删除2到4行
grep(文本行过滤工具)
grep [option]... PATTERN [FILE]
PATTERN一般使用两种方法,正则表达式和通配符
egrep = grep -E 使用扩展的正则表达式进行匹配
fgrep = fast grep 只使用文件通配符进行匹配
grep 默认使用正则表达式进行文本匹配
grep -P使用perl语言的正则表达式引擎进行搜索 grep -f指定文件 grep -i 忽略大小写 grep -v反选 grep --color=auto 语法着色 grep -c统计 grep -o输出时仅显示匹配内容(默认输出的是匹配到的行) grep -n显示行号 grep -w只匹配与整个单词匹配的行
例1、显示/proc/meminfo文件中大小s开头的行
例2、显示/etc/passwd文件中不以/bin/bash结尾的行
例3、显示/etc/passwd文件中UID最大的用户的用户名
例4、如果用户root存在,显示其默认的shell程序
例5、找出/etc/passwd中的两位或三位数