一、grep 文本过滤命令
文本过滤命令:grep是一种文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行。
grep:由正则表达式或者字符及基本文本字符所编写的过滤条件。
1、grep 中的正则表达式
-E 扩展正则表达式 |或者 -I忽略大小写 -v反向过滤,把符合信息的内容屏蔽
grep root passwd ##过滤出所有含有root的行
grep ^root passwd ##过滤出root字符在第一个的行
grep root$ passwd ##过滤出root字符在最后一个的行
grep -i root passwd ##忽略大小写过滤
grep -E "root|ROOT" passwd ##过滤出所有有root和ROOT字符的行
grep -i -E -v "^root|root$" passwd ##过滤出除了首位和尾位为root、ROOT的行
egrep "^root|root$" passwd = grep -E "^root|root$" passwd ##过滤出首位和尾位为root的行
脚本应用一
在系统中找出能登陆系统的用户有哪些
vim show_loginuser.sh
2、grep 中字符的匹配次数设定
grep 'r...t' test r和t之间字符出现[3次]
grep 'r..t' test r和t之间字符出现[2次]
grep -E 'ro*t' test 字符出现 [0- 任意次]
grep -E 'ro?t' test 字符出现 [0-1 次]
grep -E 'ro{1,}t' test ro和t之间字符出现[1- 任意次]
grep -E 'ro{1,3}t' test ro和t之间字符出现[1- 3次]
grep -E '(root){2,}' test root字符重复出现2次
grep -E 'r*t' test 字符出现 [0- 任意次]
grep -E 'r.*t' test 关键字之间匹配任意字符
grep -E 'r....' test 关键字后字符出现[4次及更多]
grep -E "r....\>" test 关键字后字符出现[4次]
grep -E "....t" test 关键字前字符出现[4次及更多]
部分命令演示如下:
二、sed 行编辑器
用来操作纯 ASCII码的文本。
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)可以指定仅仅处理哪些行;
sed 符合模式条件的处理,不符合条件的不予处理;
处理完成之后把缓冲区的内容送往屏幕;
接着处理下一行,这样不断重复,直到文件末尾。
1、p模式:显示模式
sed -n '/^#/p' fstab 显示有#的行
sed -n '/^#/!p' fstab 显示没有#的行
sed -n '/0$/p' fstab 显示以0为结尾的行
cat -n fstab |sed -n '2,6p' 显示2到6行
cat -n fstab |sed -ne '2!p;6!p' |uniq -d 显示除了第2行和第6行以外的行
脚本应用二
建立用户
vim userfile
vim passfile
vim create_user.sh
2、d模式:删除模式
cat -n fstab |sed -e '2d;6d' 删除第2行与第6行
cat -n fstab |sed -e '2,6d' 删除第2行到第6行
sed -e '/^#/d' fstab 删除#开头的行
sed -e '/^$/d;/^#/d' fstab 删除空行和#开头的行
sed -e '/UUID/d' fstab 删除UUID开头的行
sed -e '/UUID/!d' fstab 删除除了UUID以外的行
3、a模式、i模式:添加模式
a添加在关键字下面
i插入在关键字上面
a模式
vim linux
sed '/hello/aworld' linux 添加行
sed 's/hello/hello world/g' linux 修改行
sed '/hello/aworld\nwestos' linux 添加行
i模式
sed '/hello/iworld\nwestos' linux 添加行
4、C模式:替换模式
sed '/hello/chello world' linux 改变hello为hello world
sed '/hello/chello\nworld' linux \n换行
5、W模式:写入模式
sed '/hello/=;wfile' westos 显示行数和内容
sed '/hello/=' westos
sed '/hello/=' -i westos 修改文件内容
cat westos(已修改)
sed '6r westos' fstab 将westos文件内容插入fstab文件第六行下面
sed '$r westos' fstab 将westos文件内容插入fstab文件最下面
sed '1r westos' fstab 将westos文件内容插入fstab文件第一行
6、sed 的其他用法
sed -n '/^UUID/=' fstab 显示共有总行数 -n 只显示处理结果
sed '/^UUID/=' fstab 显示所有行和总行数
sed -n -e '/^UUID/p' -e '/^UUID/=' fstab -n -e 显示这一行并表明在第几行
sed 'G' fstab 每一行下面加空行
sed '$!G' fstab 删除最后一行下的空行
sed '=' fstab | sed 'N;s/\n/ /g' =显示行号 N换行符 后面替换
sed -n '$p' fstab 显示最后一行
sed 's/nologin/westos/g' passwd 替换全部字符
sed '3,5s/nologin/westos/g' passwd 替换3到5行字符
sed '/adm/,/sync/s/nologin/westos/g' passwd 关键字行字符的替换
vim file
sed -f file passwd 通过文件修改内容(临时)
cat passwd 临时修改,原文件不生效
sed -f file -i passwd 通过文件修改内容(永久)
cat passwd
脚本应用三:
通过脚本修改httpd端口
vim install_apache.sh
三、awk 报告生成器
awk 处理机制 :awk 会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作,在命令格式上分别体现如下:
BEGIN{}: 读入第一行文本之前执行,一般用来初始化操作
{}: 逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令
END{}: 处理完最后一行文本之后执行,一般用来输出处理结果
awk -F ":" '{print $1}' passwd
##以:为分隔符,打印第1列
awk '/bash$/{print}' passwd
##打印以bash结尾的行
awk -F ":" '/bash$/{print $1}' passwd
##以:为分隔符,打印以bash结尾行的第1列
awk -F ":" 'BEGIN{print "NAME"}{print $1}END{print NR}' passwd
##以:为分隔符,处理前打印 NAME ,打印第1列,处理后打印行数(NR列)
脚本应用四:
awk '/^ro/{print}' passwd 以ro开头的全部打印
awk '/^[a-d]/{print}' passwd 以a-d字母开头的全部打印
awk '/^[^a-d]/{print}' passwd 以除了a-d字母开头的全部打印
awk '/^a|nologin$/{print}' passwd 打印以a开头或nologin结尾的行
awk '/^r/&&/bash$/{print}' passwd 打印以r开头与bash结尾的行
awk '/^r/||/bash$/{print}' passwd 打印以r开头或bash结尾的行
awk -F ":" '$5~/^a/{print}' passwd 打印以a开头的行
awk -F ":" '$1!~/^r/{print}' passwd 打印除了以r开头的行
脚本应用五:
打印能登陆系统且家目录不是/home的用户个数
脚本应用六:
打印设备eth0的IP
脚本应用七:
统计文件的行数