Linux文本处理三剑客(grep、sed、awk)及正则表达式(上)

在Linux中,文本处理无非是对文本内容做查看、修改等操作。本章将介绍Linux中常用的文本处理命令,以及被称为Linux三剑客的 grep、sed 和 awk 命令。三剑客以正则表达式为基础,熟练使用这三个工具可以使我们的运维工作大大滴提高效率。在学习这三个命令之前,我们首先简单了解一下正则表达式,学正则表达式之前我们先看一下面的通配符和特殊字符:

一、通配符、特殊符号

1.1常用的通配符及含义

字符含义
*任意字符
任意单个字符
[]范围
{}序列

例:

#-----任意字符
[root@localhost ~]# ls /etc/*pass     #列出/etc/目录下以pass结尾的所有内容
ls: cannot access /etc/*pass: No such file or directory    #没有相应的内容
[root@localhost ~]# ls /etc/pass*     #列出/etc/目录下以pass开头的所有内容
/etc/passwd  /etc/passwd-           #匹配到有两项
###-----序列
[root@localhost ~]# touch a{01..10}  #连续创建10个以a开头的普通文件
[root@localhost ~]# ls
1.   a03  a06  a09  adduser.sh       his.txt   passwd.txt
a01  a04  a07  a10  anaconda-ks.cfg  ifconfig
a02  a05  a08  aa.  err.txt          ipaddr
#-----范围
[root@localhost ~]# touch asda was2 23sad 323asd sad2 s2sa 	2sdaf a
[root@localhost ~]# ls [a-z]
a
#-----任意单个字符
[root@localhost ~]# ls /etc/host?
/etc/hosts

1.2特殊字符

字符含义
‘’强引用,把其中的字符看成一个整体,不解析变量
“”弱引用,有变量解析变量
``命令,优先执行
^匹配字符串开头
$匹配字符串结尾
不管前面的命令执行成功与否都会执行下一个命令
&&前面的命令执行成功才执行后面的命令
ll前面的命令执行失败才执行后面的命令
#注释;命令提示符身份
$变量;命令提示符身份
取反;调用之前使用过的命令
<,>,<<,>>,&>重定向
l管道符,前面的输出作为后面的输入
~家目录
.当前目录;在当前文件名面前表示隐藏;chown改属组
上一级目录
-文件类型:普通文件;cd - 进入上一次目录;su - 完全切换用户
+chmod加权限

例:

#-----弱引用
[root@localhost ~]# NAME=xiaoming
[root@localhost ~]# echo "my name is $NAME"
my name is xiaoming
#-----强引用
[root@localhost ~]# echo 'my name is $NAME'
my name is $NAME·
#------序列
[root@localhost ~]# touch a ab
[root@localhost ~]# ls a{,b}
a  ab
[root@localhost ~]# cp a{,.back}
[root@localhost ~]# ls
a  ab  aback  a.back  anaconda-ks.cfg

二、正则表达式

正则表达式(Regular Expression)是一种字符模式,主要由一些元字符组成,用于在指定字符中匹配指定的字符,它将匹配被查找的行中任何位置出现的相同的模式。
正则表达式的作用:

Linux系统支持正则表达式的命令有find、grep、sed、awk
可以对大量的字符文件进行配置和处理,而且是非交互式的
可以过滤、匹配、打印相关的字符串

其实正则表达式就是一些特殊字符,只不过赋予了其特殊含义,其又分为基本正则表达式和扩展正则表达式:

基础正则表达式字符描述
\转义符
.匹配任意单个字符
[^]匹配除了其内部以外的任意一个字符
[]匹配其内部任意一个字符
\ +匹配之前的字符1次或多次
\?匹配之前的字符0次或1次
.*匹配任意长度任意字符
\ {n\ }匹配之前的项n次
\ {n,m \ }至少n次最多m次
{n,}至少n次
\ <或\b词首锚定
\ >或\b词尾锚定
[[:upper:]]所有大写字母[A-Z]
[[:lower:]]所有小写字母[a-z]
[[:digit:]]所有数字[0-9]
[[:alnum:]]所有字母和数字[a-zA-Z0-9]
[[:punct:]]所有标点符号
[[:space:]]空格
扩展正则表达式字符描述
^匹配行首,在awk中则是匹配字符的开始
$匹配行尾,在awk中则是匹配字符的结尾
^$空行
&引用模式匹配到的整个串
匹配之前的字符0次或1次
+匹配之前的字符1次或多次
*匹配之前的字符0次或多次
.匹配任意单个字符,除空行外
()创建一个用于匹配的整体
{n}匹配之前的项n次
{n,m}至少连续n次最多m次
{n,}至少n次
l交替匹配;ab(cld):abc或abd

三、实战部分

3.1、三剑客之grep

用法:grep [OPTIONS] PATTERN [FILE…]
常用选项:
-v :反向过滤
-n :显示行号(-n “”)
-i :忽略大小
-E :支持扩展正则表达式字符。等价于egrep
测试文件内容:

[root@localhost ~]# cat -A test.txt 
linuxm  $
adadasdasdadasm$
21312m$
hsj23$
khw3324ww.$
I Hate You,You BadBad$
I Love You$
$
mlinux.$
test5201ad3s14saddasssswqzlikes$
swzsadwswzsaswszswz$
MlinuxNN$
asaAaaa$
aBBBaaas$
$
$
 $
MLinuxBB$
LINUX$
I Hate You,You BadBad$
I Love You $
[root@localhost ~]# 

//排除空行
在这里插入图片描述
//找出以M或m开头的行
在这里插入图片描述
//匹配所有内容
在这里插入图片描述
//找出以m结尾的行
在这里插入图片描述
找出以数字开头的行:
在这里插入图片描述
//找出以.结尾的行
在这里插入图片描述
//匹配a出现一次或多次
在这里插入图片描述
在这里插入图片描述
//匹配a至少连续出现两次至多连续出现4次
在这里插入图片描述

//词首、词尾锚定(事实证明这个不管是用grep还是egrep符号的\都是不能省略的
在这里插入图片描述
在这里插入图片描述
//找出包含空格的行、找不包含空格的行
在这里插入图片描述
注意:egrep -n ‘[[:space:]]’ test.txt 找出了包含空行的行而egrep -n ‘[1]’ test.txt 不排除含有空格的行,排除了空行
在这里插入图片描述
//以空格开头且后面是非空格的行

grep "^[[:space:]].+[^[:space:]]+" -nE /etc/grub2.cfg

  1. :space: ↩︎

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值