1.grep
grep在数据中查寻一个字符串时,是以"整行"为单位来进行数据的取出的
cut是将一行数据当中取出我们想要的部分,而grep是分析一行数据,若当中有我们所需要的的数据,就将该行取出来
grep ##基础正规表示法
grep -E = egrep ##延伸正规表示法
- grep 格式
grep 匹配条件 处理文件
grep linux passwd ##过滤linux关键字
grep ^linux passwd ##以linux开头
grep linux$ passwd ##以linux结尾
grep -i linux passwd ##忽略大小写
grep -E "\<linux" passwd ##linux字符之前不能有字符
grep -E "\<linux\>" passwd ##linux字符前后都不能有字符
grep -E "linux\>" passwd ##linux字符之后不能有字符
grep -E '^$|^#' fstab ##过滤出空行或行首是#字符的行
grep -数字 ##显示过滤行以及上面几行和下面几行
grep -n ##显示匹配的行所在行号
grep -A ##显示过滤行以及下面几行
grep -B ##显示过滤行以及上面几行
grep -v ##反向过滤
- grep字符数量匹配规则
l...x ##l开头x结尾中间3个任意字符
.....x ##s结尾前面4个任意字符
* ##字符出现0到任意次
+ ##1到任意次
? ##0到1次
{n} ##n次
{m,n} ##m到n次
{0,n} ##0-n次
{,n} ##0-n次
{m,} ##最少m次
(lee){3} ##lee字符串出现3次
2.sed
sed命令格式:
sed 参数 命令 处理对象
sed 参数 -f 处理规则文件 处理对象
- 对字符的处理
p ##显示
sed -n 5p westos ##显示第5行
sed -n 3,5p westos ##显示3到5行
sed -ne "3p;5p" westos ##显示3和5行
sed -ne '5,$p' westos ##5到最后以行
sed -n '/^#/p' fstab ##显示以#开头的行
d ##删除
sed 5d westos ##删除第5行
sed '/^#/d' fstab ##把#开头的行删除
sed '/^UUID/!d' fstab ##除了UUID以外的行都删除
sed -e '5,$d' westos ##第5行及之后的行都删掉
a ##添加
sed -e '$a hello world' fstab ##在fstab文件行尾添加内容
sed -e '$a hello\nworld' fstab ##在fstab文件行尾添加内容时换行
sed -e '/^#/a hello world' fstab ##在fstab文件中的每个以#字符开头的行下面添加内容
c ##替换
sed -e '/^#/c hello world' fstab ##将以#字符开头的行替换为想指定的内容
sed '5chello world' westos ##将文件中的某一行替换为想指定的内容
w ##把符合的行写到指定文件中
sed '/bash$/w redhat' westos ##把westos中bash结尾的行写入redhat中
i ##插入
sed '5ihello redhat' westos ##将要写入的内容插入在指定行的上一行
r ##整合文件
sed '5r redhat' westos ##将redhat文件中的内容整合到westos文件中
sed 字符替换
sed 's/:/##/g' westos ##将文件中的所有冒号替换成##
sed '1,5s/:/##/g' westos ##将文件中的1到5行的所有冒号替换为##
sed '1s/:/##/g;5s/:/##/g' westos ##将文件中的第1行和第5行的冒号替换为##
sed '/adm/,/student/s/:/##/g' westos ##将文件中的adm字符串所在行到student字符串行的所有冒号替换为##
sed 's/\//##/g' westos ##将文件中的所有/符号替换为##(两种方式都可以)
sed 's@/@##@g' westos
sed 's/:/##/g' -i redhat ##把sed处理的内容保存到redhat文件中
3.awk(报告生成器)
awk常用于将一行当中分成数个字段来处理
awk命令实验准备文件:
命令格式:
awk -F 分隔符 BEGIN{}{}END{} FILENAME
输出开始行打印出LINE字符串,累加到最后输出文件总行数
awk的统计
NR表示行数
NF表示列数
每一行是7列(以" : "作为分隔符)
FILENAME 表示文件名称本身
文件内每一行输出打印为该文件名称;
文件中以bash结尾的行输出打印为文件名称
/bash$/ #条件
打印输出以bash结尾的行的第一列
/条件1|条件2/ ##条件1或者条件2
/条件1/||/条件2/ ##条件1或者条件2
/条件1/&&/条件2/ ##条件1并且条件2
$0 #所有的列
$1 #第一列
$2 #第二列
$3 #第三列
awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd
#输出打印/etc/passwd文件的第六列没有home关键字并且以bash结尾的行