目录
grep
grep 支持基础正则表达式
egrep=grep -E 还支持扩展,搜得更全面
grep格式
grep 匹配条件 处理文件
grep root passwd 显示含有root关键字的行
grep -i root passwd 忽略大小写
grep -E "/<root" passwd root字符前不能有字符
grep -E "root>/" passwd 后不能有字符
grep -数字 显示过滤行以及上下几行
grep -n 显示匹配行的行号
grep -A 显示过滤行以及上面几行
grep -B 显示过滤行以及下面几行
grep -v 反向过滤
grep字符数量匹配规则
^westos 以westos开头
westos$ 以westos结尾
w....s 以w开头s结尾中间任意4个字符
.....s s结尾前面任意5个字符
* 字符出现任意
? 0到1次
+ 1到任意次
{n} n次
{m,n} m到n次
{0,n} 0-n次
{,n} 0-n次
{m,} 最少m次
(lee){2} lee字符串出现了2次
例子:
显示系统中能被su 命令切换的用户名称: grep -E "bash$|sh$" /etc/passwd | cut -d : -f 1
sed
命令格式:
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件
对字符的处理
p 显示
sed -n 3p passwd 显示第3行
sed -n 3,5p passwd 显示3-5行
sed -ne "3p;5p" passwd 显示3和5行
sed -ne '5,$P' passwd 5和后面所有
sed -n '/^#/p' passwd 显示以#开头的行
d 删除
sed 5d westos 删除第5行
sed '/^#/d' 把#开头的行删掉
sed '/^#/!d' 把除了#开头的行都删掉
sed -e '5,$d' westos 删除5和后面的行
a 添加
sed -e '$a hello' passwd 添加hello
sed -e '$a hello\nword' passwd 添加hello和word \n表示换行
sed -e '/^#/a hello' passwd 除了#开头的都添加 hello
c
sed -e '/^root/c hello' passwd 替换 把root开头的行转换成hello
sed '5chello' passwd 第5行换成hello
w 把符合条件的行写入到指定文件
sed '/^root/w westosfile' passwd 把passwd中以root开头的行写入到westosfile中
i 插入
sed '5ihello' passwd
r
sed '5r file1' file2整合合并 整合文件内容到指定行
字符替换
sed 's/:/###/g' passwd g表示所有关键字的列,如果不加,默认替换每一行出现的第一列
sed 's/:/###' passwd
sed '1,5s/:/###/g' passwd 替换1到5行的:为###
sed '1s/:/###/g' passwd
sed '/lp/,/shutdown/s/:/###/g' passwd
sed 's/\//###/g' passwd 替换/为###,此处\表示转译
sed 's@/@###@g' passwd 替换/为###
sed 's@/@###@g' -i westos 把sed处理的内容保存在westos中
awk
awk -F 分割副 SEGIN{}{}END{} FILENAME
NR 行数
NF 列数
FILENAME 文件名称本身
westos westos变量直
"westos" westos字符串
/bash$/ 条件
/条件1|条件2/ 条件1或条件2
/条件1/||/条件2/ 条件1或条件2
/条件1/&&/条件2/ 条件1并且条件2
$0 所有列
$1 第1列
$2 第2列
$7 第7列
实验:
awk -F : 'BEGIN{print "name"}{print $1}END{print "end"}' passwd
BEGIN 运行处理前的动作
name 字符串不加引号表示变量,加引号表示变量本身
print "" 处理后动作
END 处理结束所做的事情
awk -F : 'BEGIN{westos=1}{westos++}END{print westos}' passwd
westos=1
每处理一行westos+1
处理所有行后打印westos的直
awk -F : '/nologin$|^root/{print $1 "---" $7}' passwd
显示以nologin结尾root开头的行的第1,7列
awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd
第6列没有home关键字并且以bash结尾的行
awk -F : 'BEGIN{n=0}$6!~/^\/home/&&/bash$|sh$/{n++}END{print n}' /etc/passwd
抓取能被su切换且家目录不在home下的用户的数量
bash$|sh$表示能被su -切换的用户
$6~//home/只能表示含home字符
^\表示转义后面的/ 因为此处/不为字符,和home一起表示根目录
ifconfig ens3 | awk '/\<inet\>/{print $2}'
显示ens3网卡的ip信息
ifconfig ens3 | awk -F " " '$3~/^netmask/{print $2}'