Linux系统工程师 4.2 -- shell文本处理工具

目录

grep

grep格式

grep字符数量匹配规则

例子:

sed

对字符的处理

字符替换

awk

实验:


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}'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值