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 #反向过滤
下面依次展示效果
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次
二、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文件为例测试效果
d 删除
sed 5d passwd #删除第五行
sed '/^#/d' fstab #把#开头的行删除
sed '/^UUID/!d' fstab #除了UUID以外的行都删除
sed -e '5,$d' passwd
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 '5d hello world' fstab
w 替换
sed '/^UUID/w westofile' fstab #把fstab中UUID开头的行写入westosfile中
i 插入
sed '5ihello westos' fstab
三、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 #第三列
例
awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd
/etc/passwd文件的第六列没有home关键字并且以bash结尾的行