欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > day019-特殊符号、正则表达式与三剑客

day019-特殊符号、正则表达式与三剑客

2025/5/22 16:30:00 来源:https://blog.csdn.net/qq_52174380/article/details/148124378  浏览:    关键词:day019-特殊符号、正则表达式与三剑客

文章目录

  • 1. 磁盘空间不足-排查流程
  • 2. 李导推荐书籍
    • 2.1 大话存储
    • 2.2 性能之巅
  • 3. 特殊符号
    • 3.1 引号系列(面试题)
    • 3.2 重定向符号
      • 3.2.1 cat与重定向
      • 3.2.2 tr命令:替换字符
      • 3.2.3 xargs:参数转换
      • 3.2.4 标准全量追加重定向
  • 4. 正则表达式
    • 4.1 基础正则
      • 4.1.1 测试文件
      • 4.1.2 查找以I开头的行
      • 4.1.3 查找以m结尾的行
      • 4.1.4 查找非空行
      • 4.1.5 排除sshd配置文件中空行和以#开头的行
      • 4.1.6 过滤出以I开头以!结尾的行
      • 4.1.7 过滤出含有大写字符的行
      • 4.1.8 过滤出含有大写字符或数字的行
      • 4.1.9 过滤出文件中以I或m或n开头的并且以!或数字结尾的行
      • 4.1.10 过滤出以.结尾的行
    • 4.2 扩展正则
      • 4.2.1 查询sshd或rsyslog进程
      • 4.2.2 统计文件中单词次数,取出前5
      • 4.2.3 统计文件中字母次数,取出前5
      • 4.2.4 过滤最少有3个最多有5个连续数字的行
      • 4.2.5 小括号():表示一个整体
  • 5. awk和正则
    • 5.1 取出passwd文件中第1、2列和最后一列
    • 5.2 取出ip a命令中的ip地址
    • 5.3 获取文件中系统的运行时间
    • 5.4 awk取行
  • 6. 思维导图

1. 磁盘空间不足-排查流程

在这里插入图片描述

2. 李导推荐书籍

2.1 大话存储

在这里插入图片描述

2.2 性能之巅

在这里插入图片描述

3. 特殊符号

3.1 引号系列(面试题)

引号说明
反引号执行命令
单引号所见即所得。单引号中的内容不会被解析,直接进行输出。
双引号一些特殊符号会被解析:``,$(),$……
不加引号特殊符号会被解析,额外支持{}、*通配符

3.2 重定向符号

重定向符号说名使用
>或1>标准输出重定向创建文件并写入内容
>>或1>>标准输出追加重定向修改配置文件
2>标准错误输出重定向较少单独使用
2>>标准错误输出追加重定向较少单独使用
>>oldboy.log 2>&1;
&>>oldboy.log
正确输出和错误输出都写入到同一个文件运行脚本或命令时经常使用
<或0<标准输入重定向,与特定命令使用,读取文件内容:tr、xargs其他命令几乎不会用
<<或0<<标准输入追加重定向,cat命令向文件中批量写入多行内容cat常用

3.2.1 cat与重定向

  • cat命令写文件

在这里插入图片描述

  • EOF为标识符标识内容的结束,用其他符号也行。

3.2.2 tr命令:替换字符

[root@oldboy99-Kylin /oldboy]# cat w.txt 16:26:42 up 83 days,  7:42,  1 user,  load average: 0.00, 0.00, 0.0007:05:48 up 18:42,  2 users,  load average: 0.01, 0.01, 0.00
[root@oldboy99-Kylin /oldboy]# tr 'a-z' 'A-Z' < w.txt 16:26:42 UP 83 DAYS,  7:42,  1 USER,  LOAD AVERAGE: 0.00, 0.00, 0.0007:05:48 UP 18:42,  2 USERS,  LOAD AVERAGE: 0.01, 0.01, 0.00
  • tr接受标准输入的数据,将数据中的小写字符都替换成本大写字符

3.2.3 xargs:参数转换

  • xargs的作用:从标准输入接受多个参数并转换成多行
  • seq num:形成一列的序列数字
[root@oldboy99-Kylin /oldboy]# seq 10 > num.txt
[root@oldboy99-Kylin /oldboy]# cat num.txt
1
2
3
4
5
6
7
8
9
10
[root@oldboy99-Kylin /oldboy]# xargs -n 3 < num.txt
1 2 3
4 5 6
7 8 9
10

3.2.4 标准全量追加重定向

  • >>oldboy.log 2>&1
  • &>>oldboy.log
[root@oldboy99-Kylin /oldboy]# echo skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo1 skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo1 skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo1 skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# cat oldboy.log 
skx
skx
skx
-bash: echo1: command not found
-bash: echo1: command not found
-bash: echo1: command not found

4. 正则表达式

正则表达式:regular expression,对字符进行查找或过滤。

正则表达式符号命令
基础正则^、&、.、*、[]grep、sed、awk
扩展正则|、+、{}、()、?egrep/grep -E、sed -r、awk

4.1 基础正则

4.1.1 测试文件

cat >/oldboy/re.txt<<EOF
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and
chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
EOF

4.1.2 查找以I开头的行

[root@oldboy99-Kylin /oldboy]# grep '^I' re.txt -n
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!

4.1.3 查找以m结尾的行

  • 文件中以m结尾的行最后还有空格
  • cat -A:显示文件中的隐藏字符
[root@oldboy99-Kylin /oldboy]# cat -A re.txt 
I am oldboy teacher!$
I teach linux.$
$
I like badminton ball ,billiard ball and chinese chess!$
my blog is http://oldboy.blog.51cto.com  $
our size is http://blog.oldboyedu.com  $
$
my qq is 49000448$
not 4900000448.$
$
my god ,i am not oldbey,but OLDBOY!$
[root@oldboy99-Kylin /oldboy]# grep 'm  $' re.txt 
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  

4.1.4 查找非空行

  • ^$:表示过滤空行
[root@oldboy99-Kylin /oldboy]# grep -vn '^$' re.txt 
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com  
6:our size is http://blog.oldboyedu.com  
8:my qq is 49000448
9:not 4900000448.
11:my god ,i am not oldbey,but OLDBOY!

4.1.5 排除sshd配置文件中空行和以#开头的行

grep -Evn '^$|^#' /etc/ssh/sshd_config

4.1.6 过滤出以I开头以!结尾的行

  • .:表示任意字符
  • *:表示前一个字符出现0次或多次
[root@oldboy99-Kylin /oldboy]# grep '^I.*!$' re.txt 
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!

4.1.7 过滤出含有大写字符的行

[root@oldboy99-Kylin /oldboy]# grep -n '[A-Z]' re.txt 
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
11:my god ,i am not oldbey,but OLDBOY!

4.1.8 过滤出含有大写字符或数字的行

[root@oldboy99-Kylin /oldboy]# grep -n '[A-Z0-9]' re.txt 
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com  
8:my qq is 49000448
9:not 4900000448.
11:my god ,i am not oldbey,but OLDBOY!

4.1.9 过滤出文件中以I或m或n开头的并且以!或数字结尾的行

[root@oldboy99-Kylin /oldboy]# grep '^[Imn].*[0-9!]$' re.txt 
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
my qq is 49000448
my god ,i am not oldbey,but OLDBOY!

4.1.10 过滤出以.结尾的行

[root@oldboy99-Kylin /oldboy]# grep -n '\.$' re.txt 
2:I teach linux.
9:not 4900000448.
####################################################
[root@oldboy99-Kylin /oldboy]# grep -n '[.]$' re.txt 
2:I teach linux.
9:not 4900000448.

4.2 扩展正则

4.2.1 查询sshd或rsyslog进程

[root@oldboy99-Kylin /oldboy]# ps -ef |grep -E '[s]shd|[r]syslog'
root         866       1  0 08:27 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root         908       1  0 08:27 ?        00:00:01 /usr/sbin/rsyslogd -n -i/var/run/rsyslogd.pid
root        1670     866  0 09:55 ?        00:00:00 sshd: root [priv]
root        1696    1670  0 09:55 ?        00:00:00 sshd: root@pts/0

4.2.2 统计文件中单词次数,取出前5

  • +:前一个字符出现一次或多次
  • -o:输出匹配的字符
[root@oldboy99-Kylin /oldboy]# grep -Eo '[a-zA-Z]+' re.txt |sort |uniq -c |sort -k1nr |head -53 blog3 I3 is3 my2 am

4.2.3 统计文件中字母次数,取出前5

[root@oldboy99-Kylin /oldboy]# grep -Eo  '[a-zA-Z]' re.txt |sort |uniq -c |sort -k1nr |head -518 o15 l12 b11 i11 t

4.2.4 过滤最少有3个最多有5个连续数字的行

[root@oldboy99-Kylin /oldboy]# grep -E '[0-9]{3,5}' re.txt 
my qq is 49000448
not 4900000448.

4.2.5 小括号():表示一个整体

[root@oldboy99-Kylin /oldboy]# lscpu |grep -E 'L(1d|1i|2|3)'
L1d cache:                          32 KiB
L1i cache:                          32 KiB
L2 cache:                           256 KiB
L3 cache:                           8 MiB
#############################################################
[root@oldboy99-Kylin /oldboy]# lscpu |grep -E 'L(1[di]|[23])'
L1d cache:                          32 KiB
L1i cache:                          32 KiB
L2 cache:                           256 KiB
L3 cache:                           8 MiB

5. awk和正则

  • -F:Field Separator,字段分隔符

5.1 取出passwd文件中第1、2列和最后一列

[root@oldboy99-Kylin ~]# awk -F ':' '{print $1,$2,$NF}' /etc/passwd |head -5 |column -t
root    x  /bin/bash
bin     x  /sbin/nologin
daemon  x  /sbin/nologin
adm     x  /sbin/nologin
lp      x  /sbin/nologin

5.2 取出ip a命令中的ip地址

  • awk按照空格或斜线作为分隔符
[root@oldboy99-Kylin ~]# ip a show ens33 |awk -F '[ /]+' 'NR==3{print $3}'
10.0.0.200

5.3 获取文件中系统的运行时间

文件内容:

cat >> w.txt <<EOF
16:26:42 up 83 days,  7:42,  1 user,  load average: 0.00, 0.00, 0.00
07:05:48 up 18:42,  2 users,  load average: 0.01, 0.01, 0.00
EOF

[root@oldboy99-Kylin /oldboy]# awk -F 'up +|, +[0-9]+ +user' '{print $2}' w.txt 
83 days,  7:42
18:42

在这里插入图片描述

5.4 awk取行

  • awk ‘NR==3’
  • awk ‘NR>=3’
  • awk ‘NR>=3&&NR<=10’
  • awk ‘/匹配行的正则表达式/’ 文件名

  • 在passwd文件中过滤包含root或oldboy的用户信息
[root@oldboy99-Kylin ~]# awk '/^root|^oldboy/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
oldboy:x:1000:1000::/home/oldboy:/bin/bash

6. 思维导图

【金山文档】 思维导图 https://www.kdocs.cn/l/co3I7PtpTYQX

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词