linux系统点正则表达式,Linux学习-正则表达式

正则表达式--对于系统管理员,每天要处理很多的信息,其中有好多无用的信息,可以通过正则表达式对信息进行过滤筛选,所谓正则表达式,就是通过一些特殊字符的排列,用以搜索,替换,删除一行或多行字符串.

目录文本过滤工具grep

正则表达式

案例

扩展正则表达式

一、文本过滤工具grep

格式:grep + [选项] + 匹配内容 + [文件]

--color=auto  关键字高亮显示

-v显示不被匹配到的行

-i忽略大小写

-n显示匹配的行号   cat /etc/passwd |grep -n  root

-c显示匹配的行数

-o仅显示匹配的字符串

-q静默模式,不显示任何信息

可以用在当我们关心的是执行是否成功,不关心执行结果的时候

grep -q shuguo /etc/group && echo exist || echo not exist   存在则输出exist,不存在则输出not exist

-A + 数字显示匹配行和向下相邻指定数字的行

cat /etc/passwd |grep -A 3  root

-B + 数字显示匹配行和向上相邻指定数字的行

-C + 数字显示匹配行和向上和向下相邻指定数字的行

-e多个选项之间or关系

grep -e root -e bin /etc/passwd

-w仅匹配整个单词

-E或egrep支持正则表达式

grep -E "root|bin" /etc/passwd

egrep "root|bin" /etc/passwd

-F或fgrep不支持正则表达式

二、正则表达式

字符匹配

.匹配任意单个字符

[]匹配范围内的任意单个字符

[^]匹配范围外的任意单个字符

[:alnum:] [:alpha:] [:lower:] [:upper:] [:digit:] [:punct:]

[:blank:]空格和制表符

[:space:]水平和垂直的空白字符(比[:blank:]范围广)

次数匹配   用在要指定次数的字符后面

*匹配前面的字符任意次,包括0次

例如: .*    任意长度的任意字符

\?匹配前面的字符0或1次

\+匹配前面的字符至少1次

\{n\}匹配前面的字符n次

\{m,n\}匹配前面的字符至少m次,至多n次

\{,n\}匹配前面的字符至多n次

\{m,\}匹配前面的字符至少m次

位置锚定   定位出现的位置,到哪里开始,到哪里结束

^行首锚定

$行尾锚定

例如:匹配以#开头,以0结尾,中间内容任意

grep "^#.*0$"

匹配以#开头,以0结尾

grep "^#0$"

^$空行

^[[:space:]]*$空白行

\

\>词尾锚定

分组

\(\)将一个或多个字符捆绑在一起,当做一个整体进行处理

例如:grep "[ab]\{2\}"表示a或者b匹配两次

grep "\(ab\)\{2\}"表示ab这个整体匹配两次

分组括号内匹配到的内容会记录于变量中,这些变量的命名为\1,\2...

\(string1\+\(string2\)\)

\1 表示 string1\+\(string2\)

\2 表示 string2

\|  或

a\|ba或b

\(C\|c\)atCat或cat

三、案例

1、显示/proc/meminfo文件中以大小s开头的行cat /proc/meminfo |grep "^s\|^S"

cat /proc/meminfo |grep -i ^s

grep ^[sS] /proc/meminfo

grep -e ^s -e ^S /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行cat /etc/passwd |grep -v "/bin/bash$"

3、显示用户rpc默认的shell程序

grep  "^\" /etc/passwd |cut -d: -f7

grep  "^rpc\>" /etc/passwd |cut -d: -f7

grep  "^\(rpc\)" /etc/passwd |cut -d: -f7

前两个结果一样,是题目要求的结果

注意区别

4、找出/etc/passwd中的两位或三位数

cat /etc/passwd |grep  -o "[[:digit:]]\{2,3\}"

cat /etc/passwd |grep -o "[[:digit:]]\{2\}\|[[:digit:]]\{3\}"

5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行

cat /etc/grub2.cfg | grep "^[[:space:]]\+[^[:space:]]"

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行

netstat -tan | grep "LISTEN[[:space:]]\+$"

7、显示CentOS7上所有系统用户的用户名和UID

cat /etc/passwd |cut -d: -f1,3 | grep "\"

8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名同shell名的行

useradd bash

useradd testbash

useradd basher

useradd sh

useradd -s /sbin/nologin nologin

cat /etc/passwd |grep "^\(.*\)\>.*\

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序

df |grep "^/dev/sd" |grep -o "[[:digit:]]\{1,3\}%" |tr -d % |sort -nr

四、扩展正则表达式

egrep = grep -E

egrep的字符匹配,次数匹配,位置锚定,分组和grep的区别就是去掉符号前边的\,除了\,\b不变

案例:

1、显示三个用户root、mage、wang的UID和默认shell

cat /etc/passwd |cut -d: -f1,3,7 |grep -w "root\|mage\|wang"

cat /etc/passwd |cut -d: -f1,3,7 |grep "^\(root\|mage\|wang\)\>"

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

cat /etc/rc.d/init.d/functions |egrep "^[_[:alpha:]]+\(\)"

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

echo /etc/rc.d/init.d/functions |egrep -o "\$"

echo /etc/rc.d/init.d/functions |egrep -o "\$"

4、使用egrep取出/etc/rc.d/init.d/functions/的目录名

echo /etc/rc.d/init.d/functions/ |egrep -o ".*/." |egrep -o ".*/"

5、统计last命令中以root登录的每个主机IP地址登录次数

last |grep "root" |tr -s " " : |cut -d: -f3 |uniq -c |sort -u

6、将此字符串:welcome to  magedu linux 中的每个字符去重并排序,重复次数多的排到前面

echo welcome to magedu linux |grep -o . |sort |uniq -c |sort -nr

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux操作系统正则表达式是一种强大的文本匹配工具,可以用于在文件查找、替换、过滤等操作。常见的Linux命令如grep、sed、awk等都支持正则表达式的使用。 以下是一些常用的正则表达式符号及其含义: - `.`:匹配任意一个字符。 - `*`:匹配前面的字符出现0次或多次。 - `+`:匹配前面的字符出现1次或多次。 - `?`:匹配前面的字符出现0次或1次。 - `^`:匹配行首。 - `$`:匹配行尾。 - `[]`:匹配括号的任意一个字符。 - `()`:将括号的内容作为一个整体进行匹配。 - `|`:匹配左右两边任意一个表达式。 下面是一些常用的Linux命令及其正则表达式的使用示例: - grep命令:用于在文件查找匹配的行。 ```shell # 查找包含"error"的行 grep "error" file.txt # 查找以"warning"开头的行 grep "^warning" file.txt # 查找以"error"结尾的行 grep "error$" file.txt # 查找以"error"开头或以"warning"结尾的行 grep "^error\|warning$" file.txt ``` - sed命令:用于对文件进行替换、删除等操作。 ```shell # 将文件的"old"替换为"new" sed 's/old/new/g' file.txt # 删除文件包含"error"的行 sed '/error/d' file.txt # 在文件开头添加一行内容 sed '1i\new line' file.txt ``` - awk命令:用于对文件进行格式化输出等操作。 ```shell # 输出文件第2列的内容 awk '{print $2}' file.txt # 输出文件包含"error"的行 awk '/error/' file.txt # 输出文件第1列和第3列的内容 awk '{print $1,$3}' file.txt ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值