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

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.00
 07: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.00
 07: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 -5
      3 blog
      3 I
      3 is
      3 my
      2 am

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

[root@oldboy99-Kylin /oldboy]# grep -Eo  '[a-zA-Z]' re.txt |sort |uniq -c |sort -k1nr |head -5
     18 o
     15 l
     12 b
     11 i
     11 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙克旭​‌​

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值