1、grep
1.grep的格式
grep 匹配条件 处理文件
例如:
grep root /etc/passwd ##在/etc/passwd全局搜索含有‘root’关键字的内容
grep ^root /etc/passwd ##在/etc/passwd全局搜索含有‘root’,且‘root’开头
grep root$ /etc/passwd ##在/etc/passwd全局搜索含有‘root’,且‘root’结尾
grep -i root /etc/passwd ##在/etc/passwd全局搜索含有‘root’,且不区分
grep -E "root|ROOT" /etc/passwd ##在/etc/passwd
2.grep中的正则表达式
^hello ##以hello开头
hello$ ##以hello结尾
'h....o' ##'h开头,o结尾,中间4个字符'
'h.....' ##'h开头,后面5个字符'
'.....o' ##'o结尾,前面5个字符'
3.grep中字符的匹配次数设定
* 字符出现 [0-任意次 ]
\? 字符出现 [ 0-1次 ]
\+ 字符出现 [ 1-任意次]
\{n\} 字符出现 [ n次 ]
\{m,n} 字符出现 [ 最少出现m次,最多出现n次]
\{0,n\} 字符出现 [ 0-n次]
\{m,\} 字符出现 [ 至少m次]
\(xy\)\{n\}xy 关键字出现[n次]
.* 关键字之间匹配任意字符
2、sed
sed 命令格式
调用sed命令有两种形式:
sed[option]'command' file(s)
sed[option] -f scriptfile file(s)
sed对字符的处理
p 显示
d 删除
a 添加
c 替换
w 写入
i 插入
1.p模式操作
sed -n '/\:/p' fstab ##显示有:的行的内容
sed -n '/UUID$/P' fstab ##显示UUID结尾的行的内容
sed -n '/^UUID/P' fstab ##显示UUID开头的行的内容
sed -n '2,6p' fstab ##显示第二行到第六行的内容
sed -n '2,6!p' fstab ##显示除了2-6行都显示
2.d模式操作
sed '/^UUID/d' /etc/fstab ##删除UUID开头的行的内容
sed '/^#/d' /etc/fstab ##删除#开头的行的内容
sed '/^$/d' /etc/fstab ##删除空行
sed '1,4d' /etc/fstab ##删除1-4行的内容
sed '/^UUID/!d' /etc/fstab ##删除除UUID开头外的行的内容
3.a模式操作
sed '/^UUID/ahello linux' fstab ##在UUID开头的行的后添加‘hello linux’
sed '/^UUID/ahello\nlinux' fstab ##在UUID开头的行的后面添加‘hello\nlinux’
4.i模式操作
sed '/^UUID/ihello\nlinux' fstab ##在UUID开头的行的前面添加‘hello\nlinux’
5.w模式操作
sed '/^#/w /mnt/testfile' fstab ##将fstab中以#为开头的行整合到/mnt/testfile中
sed -n '/^#/w /mnt/testfile' fstab ##不显示
sed '6r/mnt/linux' fstab ##将/mnt/linux中的所有内容整合到fstab的第六行中
6.c模式操作
sed '/^#/chello\nlinux' fstab ##将#开头的行的内容用‘hello\nlinux’替换
sed的其他用法
sed 'G' data ##在每行行后插入一个空白行
sed '$!G' data ##在除最后一行外的每行行后插入一个空白行
sed '=' data | sed 'N;s/\n//' ##每行行前添加行号
sed -n '$p' data ##显示最后一行
3、awk
报告生成器
awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作,在命令格式上分别体现以下:
BEGIN{}:读入第一行文本之前执行,一般用来初始化操作
{}:逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令
END{}:处理完最后一行文本之后执行,一般用来输出处理结果
awk -F : 'BEGIN{print "hello"}{print $1}END{print "end"}' /etc/passwd
#在/etc/passwd文件逐行打印每一行第一列的内容,并在首行添加‘hello’,行尾添加‘end’
awk -F : '{print FILENAME}' /etc/passwd
#在/etc/passwd文件逐行打印‘/etc/passwd’,并处理总行数次
awk -F : '{print NR}' /etc/passwd
#打印‘/etc/passwd’的行号
awk -F : '{print NF}' /etc/passwd
#打印‘/etc/passwd’的列号,并处理总行数次
awk -F : 'BEGIN{print "NAME"}'
#在开始处理文本时,打印‘NAME’
awk -F : '/bash$/{print $1}' /etc/passwd
awk -F : '{ print $1}' /etc/passwd
awk -F : '/bash$/{ print $1}' /etc/passwd
awk -F : '!/bash$/{ print $1}' /etc/passwd
awk -F : 'BEGIN{n=0}/bash$/{n++}END{print n}' /etc/passwd
awk '/[a-d]/{print}' /etc/passwd
awk '/^[a-d]/{print}' /etc/passwd
awk '!/^[a-d]/{print}' /etc/passwd
awk '!/^[^a-d]/{print}' /etc/passwd
awk '/^a|bash$/{print}' /etc/passwd
awk '!/^a|bash$/{print}' /etc/passwd
awk '/!^a|bash$/{print}' /etc/passwd
awk -F : '$6~/bin$/' /etc/passwd
awk -F : '$6~/\<bin$/' /etc/passwd
awk -F : '$6!~/^\/home/{print $1}' /etc/passwd
awk -F : '$6!~/^\/home/&&/bash$/{print $1}' /etc/passwd
ifconfig eth0 | awk '/inet\>/{print $2}'
#find #
-name
-type
-perm
-c 默认是天
find /etc -name passwd
find /etc -maxdepth 1 -name passwd ##查找深度
find /etc -mindepth 2 -name passwd
find /mnt/ -group student
find /mnt/ -user student -o -group student
find /mnt/ -user root -a -group student
find /mnt/ -size +20k -exec rm -fr {} \; ##找到大于20k的文件并删除
-cmin 小于x分钟
ugo必须包含所写条件
企业7以后是/
企业7之前是+
find /etc/ -type l ##查找/etc下链接型的文件
find /etc/ -ctime -10 ##时间小于10天
find /etc/ -ctime +10 ##大于10天
find /etc/ -cmin +/-10 ##10分钟
find /etc/ -cmin 10