Linux修炼之旅shell篇

这次给大家介绍文本处理三剑客 grep sed awk 三大神器熟练掌握可以使操作者更高效快捷地处理大批量的信息。



文章目录

  • Linux修炼之旅shell篇
  • 一、grep 过滤
  • 1.grep 匹配条件 处理文件
  • 2.grep字符数量匹配规则
  • 二、sed 替换
  • 1.对字符的处理
  • p 显示
  • d 删除
  • a 添加
  • c 替换
  • w 替换
  • i 插入
  • 三、awk



一、grep 过滤

1.grep 匹配条件 处理文件

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

下面依次展示效果

window grep工具_sed

window grep工具_sed_02

window grep工具_sed_03


window grep工具_centos_04

window grep工具_window grep工具_05


window grep工具_sed_06


window grep工具_centos_07

2.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次
(xxx){2}	#xxx字符串出现2次

window grep工具_window grep工具_08


window grep工具_服务器_09

二、sed 替换

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

1.对字符的处理

p 显示

sed -n 5p passwd #显示第五行
sed -n 3,5p passwd #显示3到5行
sed -ne "3p;5p“ passwd #显示3和5行
sed -ne 1,5p passwd #1-5行
sed -ne '5,$p' passwd #5到最后以行
sed -n '/^#/p' fstab #显示以#开头的行

还是以之前粘贴过来的pass文件为例测试效果

window grep工具_服务器_10


window grep工具_sed_11

window grep工具_sed_12

d 删除

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

window grep工具_linux_13

window grep工具_sed_14

a 添加

包含的内容基本与之前的举例类似,相应动作换为添加就是代码意思

sed -e '$a hello world' fstab #在最后直接添加
sed -e '$a hello\nworld' fstab
sed -e '/^#/a hello world' fstab #在有#的行后添加

window grep工具_服务器_15

window grep工具_centos_16

window grep工具_linux_17

c 替换

sed -e '/^#/c hello world' fstab
sed '5d hello world' fstab

window grep工具_window grep工具_18

window grep工具_服务器_19

w 替换

sed '/^UUID/w westofile' fstab #把fstab中UUID开头的行写入westosfile中

window grep工具_服务器_20

i 插入

sed '5ihello westos' fstab

window grep工具_服务器_21

三、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	#第三列

window grep工具_window grep工具_22


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

window grep工具_sed_23


window grep工具_window grep工具_24

window grep工具_服务器_25

window grep工具_centos_26


window grep工具_sed_27

window grep工具_linux_28


window grep工具_sed_29