扩展正则表达式
为了简化命令操作,扩展正则表达式更方便
#例如去除空白行与行首为#的行:
grep -v '^$' xxx.txt | grep -v '^#'
#使用扩展表达式简化为
egrep -v '^$|^#' xxx.txt
#在单引号内,管道| 的意义为或
扩展正则表达式的一些符号
+:重复一个或一个以上的前一个re字符
egrep -n 'go+d' xx.txt /一个或一个以上o
?: 零个或一个的前一个re字符
egrep -n 'go?d' xx.txt /
|: 用或的方式找出数个字符串
egrep -n 'gd|good' xx.txt /查找gd和good两个字符串
egrep -n 'gd|good|dog' xx.txt
(): 找出群组字符串
egrep -n 'g(la|oo)d' xx.txt /查找glad或good两个字符串
()+: 多个重复群组的判别
echo 'AbcbcbcbcD'|egrep'A(bc)+D'
文件的格式化与相关处理
通过数据流重定向配合print以及awk命令就可以让你的信息以你想要的模式输出。
print ’打印格式‘ 实际内容
\a 警告声音输出
\b 退格键
\f 清除屏幕
\n 输出新的一行
\r 回车按键
\t 水平的tap键
\v 垂直的tap键
\xNN NN为两位数的数字,可以转换数字为字符串
%ns n数字,多少个字符
%ni 多少个整数位
%N.nf N位数,n小数位 /%8.2f:00000.00
awk:好用的数据处理工具
akw '条件类型1{操作1}条件类型2{操作2}...' filename
#akw 主要处理每一行的字段内的数据,而默认的字段的分隔符为空格键或tap键
last -n 5 | awk '{print $1 "\t" $3}'
# 取出账号与登陆者的IP,账号与IP以tap隔开
# 在awk的括号内,每一行的每一个字段都是有变量名称,那就是$1$2等变量名称。
整个处理流程就是:
读入第一行,将第一行数据写入$0$1$2等变量
根据条件类型的限制,判断是否进行后续操作
完成所有操作与条件类型
若还有后续行的数据,则重复1-3
由此可知akw以行为一次处理的单位,以字段为最小处理单位
awk 内置变量
NF:每一行拥有的字段总数
NR:目前akw所处理的是第几行数据
FS:目前的分隔符
last -n 5| awk '{print $1 "\t lines:"NR "\t columns:"NF}'
文件比对工具
同一个软件包不同版本之间,比较配置文件与原始文件差异。
diff /通常是用在同一个文件或软件的新旧版本差异上
diff [-bBi] from file to file
-b 忽略一行中仅有多个空白的差异,如'ab c‘与 'abc'
-B 忽略空白行的差异
-i 忽略大小写
cmp [-l] file1 file2
-l 将所有不同点的字节处都列出来,因为cmp默认输出第一个不同点