SHELL脚本中的文本处理工具(grep,sed,awk)

tech2025-04-23  8

grep 过滤关键字符 grep -e=egrep grep参数 vim file

grep westos file:过滤westos关键字 grep ^westos file :过滤以westos开头的关键字 grep westos$ file :过滤以westos结尾的关键字 grep -i westos file:过滤westos关键字并且忽略大小写 grep -E “\<westos” file:过滤westos关键字并且前边不能有字符

grep -E “\westos\>” file:过滤westos关键字并且后边不能有字符 grep -数字:显示过滤行下面几行以及上面几行 grep -n :显示过滤行所在行号 grep -A:显示过滤行以及下面几行 grep -B:显示过滤行以及上面几行 grep -v :反向过滤(除了关键字符其余都显示) grep字符数量匹配规则 vim file

^westos:以westos开头 westos$:以westos结尾 w…s:以w开头s结尾中间任意四个字符

…s:以s结尾前边任意五个字符

*:字符出现任意一次

?:0-1次 +:1到任意次 {n}:指定次 {m,n}:m到n次 {0,n}:0到n次 {,n}:0到n次 {m,}:最少m次 (ab){2}:ab字符串出现两次 vim file

练习脚本:显示系统中能被su命令切换的用户名称 sed 命令格式 sed 参数 命令 处理对象 sed 参数 处理对象 -f 处理规则文件 对字符的处理 实验文件:cp /etc/passwd . cat -n passwd | tee passwd vim passwd

p:打印,显示 sed 5p passwd

-n:不显示其他内容 sed -n 3,5p passwd:显示第三行到第五行的内容 sed -ne “3p;5p” passwd:显示第三行和第五行的内容

sed -ne ‘5,$p’ passwd:显示第五行到最后一行 sed -n ‘/^#/p’ /etc/fstab:显示以#开头的行

d:删除 ded 5d passwd:删除第五行 sed ‘/^#/d’ fstab :删除#开头的行 sed ‘/^UUID/!d’ fstab:除了UUID开头的行删除 sed ‘3,$d’ passwd :删除第三行到最后一行

sed ‘3d;$d’ passwd:删除第三行和最后一行

a:添加 sed -e ‘$a hello linux’ fstab :在最后一行添加hello linux

sed -e ‘$a hello\nlinux’ fstab:在最后一行换行加入hello linux sed -e ‘/^#/a hello linux’ fstab:在所有#开头的行加入hello linux

c:替换 sed -e ‘/^#/c hello linux’ fstab:把所有以#开头的行替换成hello linux

sed ‘5c hello linux’ passwd:把第五行替换成hello linux w:写入(覆盖) sed ‘/^UUID/w passwd’ fstab:把fstab中以UUID开头的行写入到passwd中(覆盖) i:插入 sed ‘1i hello westos’ fstab:在第一行插入hello westos r:整合 sed ‘5r fstab’ passwd:把fstab整合到passwd文件的第五行 -i:导入 sed ‘1i hello linux’ -i fstab:在fstab第一行前插入hello linux 并导入fstab文件 sed字符替换 sed ‘s/😕#/g’ passwd :把passwd全文的:替换成# sed ‘s/: /#/’ passwd:把passwd全文第一个:替换成# sed ‘5s/: /#/g’ passwd :把第五行的:替换成#

sed ‘1,5s/: /#/g’ passwd:把第一行到第五行的:替换成# sed ‘1s/: /#/g;5s/: /#/g’:第一行和第五行的:替换成# sed ‘s/ \ //#/g’ passwd :把全文的/替换成# sed ‘s@/@#@g’ passwd :把全文的/替换成#(@=/) 练习脚本:Apache_port.sh 此脚本后介入数字 http的端口就改为此数字 假设selinux为关闭状态 vim Apache_port.sh 脚本测试 awk awk -F 分隔符 BEGIN{ }{ }END{ } FILENAME 默认分隔符为空格 NR:行数 NF:列数

FILENAME:文件名称本身 westos:westos变量值 “westos”:westos字符串 /bash$/:条件 /条件1|条件2/:条件1或者条件2 /条件1/||/条件2/:条件1或者条件2 /条件1/&&/条件2/:条件1并且条件2 $0:所有的列 $1:第一列 $2:第二列 $3:第三列 awk -F : ‘$6!~/home/&&/bash$/{print $0}’ /etc/passwd :在/etc/passwd中查看第六列没有home关键字并且以bash结尾输出整行

最新回复(0)