shell第二章

本文详细介绍了Linux中grep和sed命令的使用,包括基本语法、正则表达式匹配规则以及各种操作,如查找、删除、添加、替换等。同时,通过实例演示了如何在文本中筛选和处理信息。此外,还提供了awk命令的简单应用,用于报告生成和数据处理。
摘要由CSDN通过智能技术生成

1)grep简介

grep命令是一个Linux文本处理工具,它与egrep命令属于同一系列,这些命令都是用于对文件和文本执行重复搜索任务的工具。我们可以通过grep命令指定特定搜索条件来搜索文件及其内容以获取有用的信息。grep是全局搜索正则表达式并打印出匹配的行,其抓取数据是贪婪模式,即不会漏掉过滤内容,但准确性会相对降低。
2)grep命令格式

grep 匹配条件 处理文件名称
grep  root passwd 			##过滤root关键字所在的行
grep -i root passwd 		##忽略大小写过滤root关键字所在的行
grep -E "\<root" passwd 	##过滤root字符之前没有字符的行
grep -E "root\>" passwd 	##过滤root字符之后没有字符的行
grep -数字 					##显示过滤行以及上面几行和下面几行
grep -n 					##显示匹配的行所在行号
grep -A数字 				##显示过滤行以及下面几行
grep -B数字 				##显示过滤行以及上面几行
grep -v 					##反向过滤  不含该关键字的行

3)grep命令字符数量匹配规则

正则表达式含义
^westos以westos关键字开头
westos$以westos结尾
w…sw开头s结尾中间含有3个任意字符
…ss结尾前面有3个任意字符
*字符出现次数任意(即0次到任意次
?字符出现0到1次
+字符出现1次到任意次
{n}字符出现n次
{m,n}字符出现m到n次
{,n}字符出现0到n次
{m,}字符最少出现m次

grep ^westos passwd 
   grep bash$ passwd 
   grep c..... passwd 
  grep ......n  passwd 
注意最后两条,这里的开头和结尾 不是正经的开头和结尾,只要满足。。。。的条件,不管单词在那个位置都会被查出来

grep -E w(ab){2,}s test
  278  grep -E "w(ab){2,}s" test  关键字是wababs
  279  grep -E "wa{2,3}s" test 关键字是waas和waaas

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

2、sed

1)sed简介

sed 全名叫 stream editor即流编辑器,与 vim 的交互式编辑方式截然不同,作为一种非交互式编辑器,sed使用预先设定好的编辑指令对输入的文本进行编辑,完成之后输出编辑结果。其功能十分强大,加上正则表达式的支持,可以进行大量的复杂文本的编辑操作。

2)sed命令格式

a)p :显示

sed 参数 命令 处理对象
sed -n 5p westos 		##显示第5行
sed -n 3,5p westos 		##显示第3行到第5行
sed -n "3p;5p" westos 	##显示第3行和第5行
sed -n 1,5p westos 	##显示1-5行
sed -n '5,$p' westos 	##显示第5行到最后一行
sed -n '/^#/p' fstab 	##显示以#开头的行
sed -n 5p passwd 
  290  sed -n 3,5p passwd 
  292  sed -ne "3p;5p" passwd 
  294  sed -ne '5,$p' passwd 

 sed -n '/^c/p' passwd  显示以c开头的行

b)d :删除

sed 5d passwd ##删除第5行
sed '/^c/d' passwd ##把以c开头的行删除
	
sed -e '5,$d' passwd ##删除第5行到最后一行
  308  sed  '/^r/!d' passwd ##删除不是以r开头的所有行

 

c)a :添加

sed '/^#/a hello world' fstab	##在以#开头的行后添加字符串
 sed '$a hello world' fstab ##在最后一行后添加字符串
   sed '2atesttest' fstab   第二行添加testtest
    sed '/3333333/ahahahaha' fstab 在33333333后边加hahahahahah
    sed '$a huanhang\nhahahahahaha' fstab  ##在最后一行后添加字符串,使用换行符隔开

 

d)c :替换

 sed '/^2/c hello world' fstab     ##将所有以2开头的行替换为指定字符串
  sed '1cshiwobushini' fstab            ##将第5行替换为指定字符串
  sed '/44444444/cnimeiiangdaoba' fstab  把444444444替换为nimeiiangdaoba

e)w :把符合的行写入到指定文件中

sed '/nologin$/wwestosfile' /etc/passwd 把passwd中nologin结尾的行写入westosfile中


 

f)i :插入

sed '5ihello westos' westos:在westos文件的第5行前插入指定字符串
插入是插入前边,添加是添加在后边,插入类似插队

 sed '/3333333/ahahahaha' fstab 
 sed '/3333333/ihahahaha' fstab 


 

g)r :整合文件

 sed '2raaa' fstab :将aaa文件中的内容整合到fstab文件的第2行后

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文件中

  135  cp /etc/passwd .
  136  vim passwd 
  137  cat passwd 

sed 's/a/b/g' test  把a替换成b,g表示关键字的所有列,不加g表示第一列
 sed 's/a/b/' test

 

 sed 's/nologin/haha/g' passwd   把所有的nologin替换成haha
  sed '1,5s/sbin/###/g' passwd    把1-5行所有的sbin替换成###

 

156  sed '$s/nologin/haha/g' passwd   最后一行nologin替换为haha 
  158  sed '/colord:/,/nologin/s/sbin/buhuiba/g' passwd  把colord和nologin之间的sbin替换为buhuiba

 

 

特殊符号替换:把/替换为###,下边两种方法
sed 's/\//###/g' passwd  直接用转义符号\,表示/只是一个普通字符,没有特殊含义
   sed 's@/@###@g' passwd  用@代替/,要替换的/就失去了特殊意义

 

 

注意:以上所有的操作均无法在文件中保存,下面这个方法能保存到文件

 sed 's@/@###@g'  -i  passwd 保存到文件

 脚本练习:
Apache_port.sh
此脚本接入数字
http的端口就改为此数字
假设selinux为关闭状态
例如:
sh Apache_port.sh
ERROR: Pleaase input port number following script !!
sh Apache_port.sh 8080
apache的端口会被修改为8080

3.awk(报告生成器)

awk -F 分割符 BEGIN{}{}END{} FILENAME
##BEGING处理之前所需做的事情
##END处理之后所需做的事情

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 : '{print NR}' /mnt/passwd  行号
   30  awk -F : '{print NF}' /mnt/passwd  每行有几列
   31  awk -F : '{print FILENAME}' /mnt/passwd   处理的文件名称

  34  awk -F : 'BEGIN{westos=1}{westos++}END{print westos}' /mnt/passwd
   35  awk -F : 'BEGIN{westos=1}{++westos}END{print westos}' /mnt/passwd
每处礼一行,westos自加一

   37  awk -F : '/nologin$/{print $1,$3}' /mnt/passwd  nologin结尾的
   38  awk -F : '/nologin$|^root/{print $1,$3}' /mnt/passwd  一个条件两个元素
   39  awk -F : '/nologin$/||/^root/{print $1,$3}' /mnt/passwd  两个条件
把||改为&&就是并且,但是并且不能一个条件两个元素

awk -F : '$7~/bash$/{print $0}' /mnt/passwd 第七列是bash结尾的
   43  awk -F : '$7!~/bash$/{print $0}' /mnt/passwd   不是bash结尾

脚本练习:

统计在系统中能su切换的并且用户加目录不在/home下的用户数量

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值