shell处理工具

1.grep

grep
grep -E = egrep
在某些机器上,要使用-E参数才能进行逻辑匹配

1.1grep 格式

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				##反向过滤

在这里插入图片描述
在这里插入图片描述

1.2grep字符数量匹配规则

^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次

在这里插入图片描述

2.sed

2.1命令格式:

sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件

2.2对字符的处理

2.2.1p ##显示

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		##显示以#开头的行	

2.2.2d ##删除

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

删除第三行

[root@client lzy2]# sed 3d westos2
     1	
     2	#
     4	# Created by anaconda on Sat Aug 22 08:47:43 2020
     5	#

删除以#开头的行

[root@client lzy2]# sed '/^#/d' fstab    ##删掉以#开头的行

UUID=12364ce4-e12c-4b77-ba1d-d03727c970b2 /                       xfs     defaults        0 0
UUID=3ab7dcd6-40c3-4e17-9d82-c59dbe73fb4d /boot                   xfs     defaults        0 0

删除文件中的空行及以#开头的行

[root@client lzy2]# sed -e '/^$/d;/^#/d' fstab   ###删除文件中的空行及以#开头的行
UUID=12364ce4-e12c-4b77-ba1d-d03727c970b2 /                       xfs     defaults        0 0
UUID=3ab7dcd6-40c3-4e17-9d82-c59dbe73fb4d /boot                   xfs     defaults        0 0

[root@client lzy2]# cat fstab
UUID=12364ce4-e12c-4b77-ba1d-d03727c970b2 /                       xfs     defaults        0 0
UUID=3ab7dcd6-40c3-4e17-9d82-c59dbe73fb4d /boot                   xfs     defaults        0 0
UUID=ce885f30-ece3-4e6b-9717-a911672d57ae swap                    swap    defaults        0 0
UUID=a6f2a133-0953-4f22-9797-43533ab7e29c   /iscsidisk     xfs    defaults,_netdev        0 0   

删除最后一行

[root@client lzy2]# sed -e '$d' fstab   ###$d :最后一行
UUID=12364ce4-e12c-4b77-ba1d-d03727c970b2 /                       xfs     defaults        0 0
UUID=3ab7dcd6-40c3-4e17-9d82-c59dbe73fb4d /boot                   xfs     defaults        0 0
UUID=ce885f30-ece3-4e6b-9717-a911672d57ae swap                    swap    defaults        0 0
[root@client lzy2]# 

2.2.3a ##添加

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

添加到指定行后面

[root@client lzy2]# sed '1awestoslinux' fstab   ###添加,到第一行之后,第二行

westoslinux    ##前有一空行
#
# /etc/fstab
# Created by anaconda on Sat Aug 22 08:47:43 2020
[root@client lzy2]# sed '/UUID/awestoslinux' fstab   ###所有以uuid开头的行后加字符

UUID=12364ce4-e12c-4b77-ba1d-d03727c970b2 /                       xfs     defaults        0 0
westoslinux
UUID=3ab7dcd6-40c3-4e17-9d82-c59dbe73fb4d /boot                   xfs     defaults        0 0
westoslinux
UUID=ce885f30-ece3-4e6b-9717-a911672d57ae swap                    swap    defaults        0 0
westoslinux

2.2.4c 替换

sed -e '/^#/c hello world' fstab     ##替换所有以#开头的行为hello world   
sed '5chello world' westos    ##替换第5行为hello westos

替换,所有以#开头的为hellowestos

[root@client lzy2]# sed '/^#/chellowestos' fstab
hellowestos
hellowestos
hellowestos
hellowestos
hellowestos
hellowestos
UUID=12364ce4-e12c-4b77-ba1d-d03727c970b2 /                       xfs     defaults        0 0
UUID=3ab7dcd6-40c3-4e17-9d82-c59dbe73fb4d /boot                   xfs     defaul

替换指定行内容
在这里插入图片描述

2.2.5w ##把符合的行写到指定文件中

sed '/^#/w  fstabfile'	fastab##把fstab中#的行写入fstabfile中

在这里插入图片描述

2.2.6i ##插入

sed '3ihello westos' westos 把hello westos插入到第三行

[root@client lzy2]# sed '3ihello westos' fstab
UUID=12364ce4-e12c-4b77-ba1d-d03727c970b2 /                       xfs     defaults        0 0
UUID=3ab7dcd6-40c3-4e17-9d82-c59dbe73fb4d /boot                   xfs     defaults        0 0
hello westos
UUID=ce885f30-ece3-4e6b-9717-a911672d57ae swap                    swap    defaults        0 0
UUID=a6f2a133-0953-4f22-9797-43533ab7e29c   /iscsidisk     xfs    defaults,_netdev        0 0   

2.2.7r ##整合文件

sed '1r fst' fstab     ##把fst文件整合到fstab文件的第1行下面

在这里插入图片描述

2.3sed 字符替换

1

sed 's/:/###/g' westos  ##修改全文的:为###
sed 's/:/###/' westos  ##修改第一列的:为###

在这里插入图片描述
2

sed 's/:/###/g' westos 
sed '1,5s/:/###/g' westos       ##修改1到5行所有列的:为###
[root@client lzy2]# sed '1,5s/sbin/westos/g' passwd  ###修改1到5行的sbin到westos
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/westos/nologin
daemon:x:2:2:daemon:/westos:/westos/nologin
adm:x:3:4:adm:/var/adm:/westos/nologin
lp:x:4:7:lp:/var/spool/lpd:/westos/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

3

sed '1s/:/###/g' westos
sed '1s/:/###/g;5s/:/###/g' westos     ####;两个指令
sed '/lp/,/shutdown/s/:/###/g' westos      ##修改字符之间的
[root@client lzy2]# sed '/lp/,/halt/s/sbin/westos/g' passwd   ##把lp,到halt之间的sbin改为westos
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/westos/nologin
sync:x:5:0:sync:/westos:/bin/sync
shutdown:x:6:0:shutdown:/westos:/westos/shutdown
halt:x:7:0:halt:/westos:/westos/halt

4

sed 's/\//####/g' westos ##修改全文的\为###   “\" 也可以写为@
sed 's@/@####@g' westos

在这里插入图片描述

[root@client lzy2]# sed '1,5s@sbin@westos@g' passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/westos/nologin
daemon:x:2:2:daemon:/westos:/westos/nologin
adm:x:3:4:adm:/var/adm:/westos/nologin
lp:x:4:7:lp:/var/spool/lpd:/westos/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

5

sed 's@/@####@g' -i  westos 		把sed处理的内容保存到westos文件中
[root@client lzy2]# sed '1,5s@sbin@westos@g' -i passwd
[root@client lzy2]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/westos/nologin
daemon:x:2:2:daemon:/westos:/westos/nologin
adm:x:3:4:adm:/var/adm:/westos/nologin
lp:x:4:7:lp:/var/spool/lpd:/westos/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

编写修改规则

[root@client lzy2]# cat rule     ###替换规则
s/sbin/westos/g    ##全文的sbin改为westos
s/nologin/linux/g   ##全文的nologin改为linux
[root@client lzy2]# sed -f rule passwd    ##执行规则
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/westos/linux
daemon:x:2:2:daemon:/westos:/westos/linux
adm:x:3:4:adm:/var/adm:/westos/linux
lp:x:4:7:lp:/var/spool/lpd:/westos/linux
sync:x:5:0:sync:/westos:/bin/sync
shutdown:x:6:0:shutdown:/westos:/westos/shutdown
halt:x:7:0:halt:/westos:/westos/halt
mail:x:8:12:mail:/var/spool/mail:/westos/linux
operator:x:11:0:operator:/root:/westos/linux
games:x:12:100:games:/usr/games:/westos/linux

3.awk

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

NR行数
NF列数
FILENAME文件名称本身
westoswestos变量值
“westos”westos字符串
{print hello}hello变量值
{print “hello”}hello字符串
/bash$/	    |条件
“/条件1|条件2/	#条件1或者条件2
/条件1/||/条件2/	  #条件1或者条件2
/条件1/&&/条件2/	  #条件1并且条件2
$0所有的列
$1第一列
$2第二列
$3第三列
~:是
!~:不是

显示行数

[root@1 mnt]# awk '{print NR}' passwd
1
2
3
4
5
6
7
8
9
10
11
12
13

显示列数

[root@1 mnt]# awk '{print NF}' passwd
1
1
1
1
1
1
1
1
1
1
1
2
3

以:为分隔符,显示列数

[root@1 mnt]# awk -F : '{print NF}' passwd
7
7
7
7
7
7
7
7
7
7
7
7
7

在这里插入图片描述

/etc/passwd文件的第六列没有home关键字并且以bash结尾的行

awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值