shell常用命令之grep、sed、awk

grep

Global search Regular Expression and Print out the line
全面搜索研究正则表达式并显示出来 grep命令是一种强大的文本搜索工具,根据用户指定的“模式”对目标文件进行批匹配检查,打印匹配到的行
由正则表达式或者字符及文本字符所编辑的过滤条件

grep中字符定位

-i	##忽略字母大小写
-v	##条件取反
-c	##统计匹配行数
-q	##静默,无任何输出
-n	##显示匹配结果所在的行号
\<  ##关键字左边不能有其他字符(不包含特殊字符)
>\  ##关键字右边不能有其他字符(不包含特殊字符)

(1)普通过滤关键字

grep root passwd

在这里插入图片描述

(2)忽略大小写

grep -i root passwd

在这里插入图片描述

(3)关键字左边不能有其他字符(不包含特殊字符)

grep "\<root" passwd

在这里插入图片描述

(4)关键字右边不能有其他(不包含特殊字符)

grep "root\>" passwd

在这里插入图片描述

(5)关键字左右不能有其他(不包含特殊字符)

grep "\<root\>" passwd

在这里插入图片描述

(6)以关键字开头

^关键字 以关键字开头

(7)以关键字结尾

关键字$ 以关键字结尾
grep -E "^root\>|\<root$" passwd   ##因为有 | ,需要扩展-E(extend)
egrep "^root\>|\<root$" passwd

在这里插入图片描述

(8)-v 反向过滤,不包含的所有

grep -E "^root\>|\<root$" passwd -v
grep -E "^root\>|\<root$" passwd -v | grep root
grep -E "^root\>|\<root$" passwd -v | grep "\<root\>"

在这里插入图片描述

过滤指定字符
正则表达式:对于特殊字符需要转义\,并且加上双引号
(2)grep 中字符的匹配次数设定

*        字符出现 [0- 任意次 ]
?        字符出现 [0-1 次 ]
+        字符出现 [1- 任意次 ]
{n}      字符出现 [n 次 ]
{m,n}    字符出现 [ 最少出现 m 次,最多出现 n 次 ]
{0,n}    字符出现 [0-n 次 ]
{m,}     字符出现 [ 至少 m 次 ]
(xy){n}  xy关键字出现 [n 次 ] 
.*       关键字之间匹配任意字符
{}大括号内的内容属于哪一个程序
()括号内属于一个整体

在这里插入图片描述

在这里插入图片描述

sed

sed stream editor(行编辑器)
用来操作纯 ASCII 码的文本处理时 , 把当 前处理的行存储在临时缓冲区中 ,
称为“模式空间” (pattern space) 可以指定仅仅处理哪些行。
sed符合模式条件的处理不符合条件的不予处理,处理完成之后把缓冲区的内容送往屏幕接着处理下一行 , 这样不断重复 , 直到文件末尾。

sed对字符的处理

p  显示
d  删除
a  添加
c  替换
w  写入
i  插入

p操作模式
显示fstab以#开头的行

sed -n '/^#/p' fstab

在这里插入图片描述

不显示以#开头的行

sed -n ‘/^#/!p’ fstab
在这里插入图片描述

显示fstab的2-6行

cat -n fstab | sed -n '2,6p'

显示fstab的第2行和第6行

cat -n fstab | sed -n -e '2p;6p'
cat -n fstab | sed -n -e '2p' -e '6p'

d操作模式

不显示空行

sed -e '/^$/d' fstab

不显示空行和以#开头的行

sed -e '/^$/d;/^#/d' fstab

不显示4-6行

cat -n fstab | sed '4,6d'

-n:抑制模式空间的输出

a操作模式

在fstab文件中以UU开头的行后面加hello并换行加world

sed '/^UU/ahello\nworld' fstab

在这里插入图片描述

i操作模式

将指定内容插入在UU前面
sed '/^UU/ihello\nworld' fstab在这里插入图片描述

c操作模式

将#替换成hello
sed '/^#/chello' fstab在这里插入图片描述

w操作模式

把fstab中以#开头的写入文件testfile

sed -n '/^#/w /mnt/testfile' fstab
sed -n '/^#/p' fstab >testfile

在这里插入图片描述

sed的其他用法

=       表示加入行号;
6r      表示将文件写入第6行下一行;
N       表示每一行添加换行符
G       表示每行后面插入空行
-n '$p' 显示文件最后一行
-i      改变原文件的内容
-f      在文件中写替换策略,调用文件替换

显示fstab中的行号并与内容分开

sed '/^#/=' fstab

仅仅显示某一行的行号

sed -n '/^UUID/=' fstab

将行号和内容显示到一行

sed -ne '/^UUID/=;/^UUID/p' fstab | sed 'N;s/\n/ /g'  ##将换行符号替换为空格

在这里插入图片描述

将hello中的内容加入到fstab中第五行之后

sed '5r /mnt/hello' /mnt/fstab

在这里插入图片描述

使用文件替换3-5行的#
在这里插入图片描述
加入行号并将换行符替换为空格
在这里插入图片描述
加入行好并插入到文件
在这里插入图片描述
1-3行替换nologin为bash
在这里插入图片描述
第一行和第三行替换,-e表示继续执行
在这里插入图片描述
将bin到lp之间的行的nologin替换为bash

在这里插入图片描述
将/替换为空格,因为文件中的/与命令中的/相同,故需要用\转义将其区分
或者用@代替/执行命令
在这里插入图片描述
G插入空格
在这里插入图片描述
最后一行没有空格

sed '$!G' passwd

在这里插入图片描述

``与$(区别
$()在bash版本中肯定可以使用
倒引号对每一个版本都支持

awk

awk 处理机制:
awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后以行做一些总结性质的工作,在命令格式上分别体现如下:
BEGIN{}:读入第一行文本之前执行,一般用来初始化操作; {}:逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令;
END{}:处理完最后一行文本之后执行,一般用来输出处理结果;

NR 行
NF 列
{} 精确匹配
[] 模糊匹配

加法运算

awk 'BEGIN{n=100;print n+100}'

在这里插入图片描述
以分号为分隔符,输出第一列并以hello开头以end结尾

awk -F : 'BEGIN{print "hello"}{print $1}END{print "end"}' passwd

输出文件名

awk -F : '{print FILENAME}' passwd

输出行数与列数

awk -F : '{print NR,NF}' passwd

在这里插入图片描述
输出以bash结尾的行数

awk 'BEGIN{N=0}/bash$/{n++}END{print n}' passwd

输出以a-d开头的

awk '/^[a-d]/{print}' /etc/passwd

输出不以a-d开头的

awk '!/^[a-d]/{print}' /etc/passwd=awk '/^[^a-d]/{print}' /etc/passwd

输出以a开头或以bash结尾的

awk '/^a|bash$/{print}' /etc/passwd

输出以冒号为分割符以a开头,bash结尾的第一列第二列

awk -F : '/^a|bash$/{print $1,$2}' /etc/passwd

输出第6列以bin结尾的第一列和第六列

 awk -F : '$6~/bin$/{print $1,$6}' /etc/passwd

输出第6列不以bin结尾的第一列和第六列

awk -F : '$6!~/bin$/{print $1,$6}' /etc/passwd

偶数行

awk -F: 'NR % 2 == 0 {print}' /etc/passwd 

3-5行

awk -F: 'NR >=3 && NR <=5 {print }' /etc/passwd

统计文本总字段个数

awk 'BEGIN{i=0}{i+=NF}END{print i}' linux.txt

输出每一行的内容,并在每一行的第一列前加上行号

awk -F ":" '{print NR,$0}' passwd 

显示可以登陆的用户

awk -F ":" '\$6!~/^\/home/&&/bash\$/{print $1}' /etc/passwd

显示主机ip

ifconfig eth0 | awk '/inet\>/{print $2}'

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44416500/article/details/87968284