2.文本处理工具

   1.grep   
grep
grep -E = egrep

  grep 格式 
grep 匹配条件 处理文件

grep root passwd        过滤root关键字
grep ^root passwd         以root开头
grep root$ passwd         以root结尾
grep -i root passwd           后略大小写
grep -E "\<root" passwd       root字符之前不能有字符
grep -E "root\>" passwd       root字符之后不能有字符
grep -数字            显示过滤行以及上面几行和下面几行
grep -n               显示匹配的行所在行号
grep -A               显示过滤行以及下面几行
grep -B               显示过滤行以及上面几行
grep -v               反向过滤



grep字符数量匹配规则
^westos              以westos开有
westos$              以westos结尾
w....s               w开头s结尾中间4个任意字符
.....s               s结尾前面5个任意字符
*                 字符出现1任意
?                 0到1次
+                 1次到任意次
{n}               n此
{m,n}                m到n次
{0,n}                0-n次
{,n}                 0-n次
{m,}                 最少m次
(lee){2}             lee字符串出现2次

 


练习脚本:
请显示系统中能被su命令切换的用户名称


     2.sed       
命令格式:
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件

对字符的处理
p                 显示
sed -n  5p westos         显示第五行
sed -n  3,5p westos       显示3到5行
sed -ne  "3p;5p westos        显示3和5行
sed -ne 1,5p westos       1-5行
sed -ne '5,$p'  westos        5到最后以行
sed -n '/^ /p' fstab          显示以 开头的行  

 


d                 删除
sed 5d  westos            删除第五行
sed '/^ /d' fstab         把 开头的行删除
sed '/^UUID/!d' fstab         除了UUID以外的行都删除
sed -e '5,$d' westos   

 

a                 添加
sed -e '$a hello world' fstab
sed -e '$a hello\nworld' fstab
sed -e '/^ /a hello world' fstab


c                 替换
sed -e '/^ /c hello world' fstab
sed '5chello world' westos


w                 把符合的行写到指定文件中
sed '/^UUID/w westofile' westos   把westos中UUID开头的行写入westosfile中


i                 插入
sed '5ihello westos' westos


r                 整合文件
sed '5r haha' westos


sed 字符替换
sed 's/:/   /g' westos
sed 's/:/   /' westos
sed 's/:/   /g' westos
sed '1,5s/:/   /g' westos
sed '1s/:/   /g' westos
sed '1s/:/   /g;5s/:/   /g' westos
sed '/lp/,/shutdown/s/:/   /g' westos
sed 's/\//    /g' westos
sed 's@/@    @g' westos


sed 's@/@    @g' -i  westos         把sed处理的内容保存到westos文件中

sed '=' passwd | sed 'N;s/\n/ /g'
sed -n '$=' /etc/passwd



练习及脚本
Apache_port.sh
此脚本后介入数字
http的端口就改为此数字
假设selinux为关闭状态


3.awk
awk -F 分隔符 BEGIN{}{}END{} FILENAME

NR      行数
NF       列数
FILENAME    文件名称本身
westos      westos变量值
“westos”  westos字符串

~        是
!~      不是

awk '{print NR}' /etc/passwd
awk '{print NR" "$0}' /etc/passwd
awk -F : '{print NF}' /etc/passwd
awk -F : '{print $1}' /etc/passwd
awk -F : '$1~/^root/{print $1}' /etc/passwd

/bash$/         条件
/条件1|条件2/      条件1或者条件2
/条件1/||/条件2/   条件1或者条件2
/条件1/&&/条件2/   条件1并且条件2

$0          所有的列
$1          第一列
$2          第二列
$3          第三列

 /etc/passwd文件的第六列没有home关键字并且以bash结尾的行
awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd

awk -F : '$5~/^$/{print}'  /etc/passwd


课后练习:
统计杂在系统中能su切换的并且用户加目录不在/home下的用户数量

awk -F : 'BEGIN{N=0} $6!~/^\/home/ && /\/bash$/ || /\/sh$/ {N++} END{print N}'  /etc/passwd

 

 

 

    

猜你喜欢

转载自blog.csdn.net/qq_47714288/article/details/111304834
今日推荐