目录
一、正则表达式 grep
1、正则表达式的作用正则表达式的组成
1)正则表达式的作用
针对文件或者文本内容进行处理
帮助用户快速查找文本文件内容
2)正则表达式的组成
普通字符
大写A-Z
小写a-z
符号
元字符
2、正则表达式的常见选项和正则表达式常见的元字符
1)正则表达式grep常见的选项
-n:显示行号
-o:只显示匹配内容
-i:不区分大写或者小写字母
-v:取反
-E:支持扩展
-q:静默执行
-w: 识别为单词
-c: 统计匹配的行数
2)正则表达式的元字符
^:匹配行起始内容
$:匹配行结束内容
.:匹配任意单字符
.*:匹配任意字符
[]:匹配括号里边的内容
[-]:匹配括号里边内容的范围
{n}:匹配的范围的次数
[n1-n2]:匹配开始和结束内容
{ n,m }:重复前面的一个字符n到m次
{ n, }:重复前面的一个字符至少n次
[^]:匹配括号之外的任意字符
\:转义字符
\<: 固定词首
\>: 固定词尾
示例文件
[root@bogon ~]# vim dd.sh
#!/bin/bash
qwe
qsdfe
qsdf
asdf
1234
12354
过滤关键字并显示行号
[root@bogon ~]# grep -n '1234' dd.sh
6:1234
查看行q开始字段
[root@bogon ~]# grep -n '^q' dd.sh
2:qwe
3:qsdfe
4:qsdf
匹配任意单个字符
[root@bogon ~]# grep -n 'q.e' dd.sh
2:qwe
[root@bogon ~]# grep -n 'q...e' dd.sh
3:qsdfe
匹配括号内容
[root@bogon ~]# grep -n 'q[w]e' dd.sh
2:qwe
[root@bogon ~]# grep -n 'qs[d]f' dd.sh
3:qsdfe
4:qsdf
只显示匹配内容
[root@bogon ~]# grep -o 'q' dd.sh
q
q
q
匹配开始是q结束是e的字段
[root@bogon ~]# grep -n 'q*e' dd.sh
2:qwe
3:qsdfe
[root@bogon ~]# grep -n "q*f" dd.sh
3:qsdfe
4:qsdf
5:asdf
过滤IP地址信息
[root@bogon ~]# cat q.txt
192 .168.1.139192 .168.1.111
192 .168.1.121
[root@bogon ~]# grep -n -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" q.txt
1:192.168.1.139
2:192.168.1.111
3:192.168.1.121
扩展正则表达式
扩展正则表示常见的元字符
+:重复一次或者多次前面字符显示出来
?:显示当前字母前一个字符
|:或者,显示多个字符
():查找组字符串
()+:辨别多个重复组
将4前面内容显示出来
[root@bogon ~]# egrep -n '?4' dd.sh
6:1234
7:12354
将qwe或者asd显示出来
[root@bogon ~]# egrep -n 'qwe|asd' dd.sh
2:qwe
5:asdf
将包含 q 1 a 字符所在行显示出来
[root@bogon ~]# egrep -n '(q|1|a)' dd.sh
1:#!/bin/bash
2:qwe
3:qsdfe
4:qsdf
5:asdf
6:1234
7:12354
将开头是q 中间是sd 结束是f 的单词显示出来
[root@bogon ~]# egrep -n 'q(sd)f' dd.sh
3:qsdfe
4:qsdf
sed和awk
1、sed的作用和sed的工作流程
1)sed的作用
sed是一个文本文件解析转换工具
用于读取、修改、显示数据
2)sed的作用流程
读取数据:从文件、输入、管道命令中读取数据,临时存储数据
执行:根据sed命令在模式操作空间中进行无交互修改数据
显示:将文本文件的修改结果进行打印显示
2、sed命令常见的选项和操作符
1)sed命令选项
-n:显示处理后的结果
-h:显示帮助
-e:指定命令或者脚本处理输入的文本文件
-f:指定脚本处理输入的文本文件
-i:直接编辑文本文件
2)sed的操作符号
a:添加内容
d:删除内容
p:打印内容
s:替换内容
y:字符转换
c:将特定行替换成指定的内容
3、sed的基本应用
显示一到三行数据
[root@bogon ~]# sed -n '1,3p' dd.sh
#!/bin/bash
qwe
qsdfe
显示奇数
[root@bogon ~]# sed -n -e '1p;3p;5p' dd.sh
#!/bin/bash
qsdfe
asdf
不显示第一行数据(可以算是删除 没有真正删除掉)
[root@bogon ~]# sed '1d' dd.sh
qwe
qsdfe
qsdf
asdf
1234
12354
修改大小写
[root@bogon ~]# sed -i 's/qwe/QWE/' dd.sh
[root@bogon ~]# cat dd.sh
#!/bin/bash
QWE
qsdfe
qsdf
asdf
1234
12354
关键字添加注释
[root@bogon ~]# sed -i '/^QWE/s/^/#/' dd.sh
[root@bogon ~]# cat dd.sh#!/bin/bash
#QWEqsdfe
qsdf
asdf
1234
12354
将1到5行移动到6到7行中间
[root@bogon ~]# sed -i '1,5H;6,7G' dd.sh
[root@bogon ~]# cat dd.sh
#!/bin/bash
QWE
qsdfe
qsdf
asdf
1234#!/bin/bash
QWE
qsdfe
qsdf
asdf
12354#!/bin/bash
QWE
qsdfe
qsdf
asdf
4.awk的使用
1)awk的作用
过滤和读取数据使用
2)awk的变量
FS:文本字段的分隔符,可以使用空格为占位符
NF:处理行数
NR:处理数据的行号
$0:处理数据的整行数据
$n:处理数据行的第几列数据
显示第一列数据
[root@bogon ~]# awk '{print $1}' q.txt
192
192
192
显示所有内容
[root@bogon ~]# awk '{print}' dd.sh
#!/bin/bash
#QWE
qsdfe
qsdf
asdf
#!/bin/bash
#QWE
qsdfe
qsdf
asdf
#!/bin/bash
#QWE
qsdfe
qsdf
asdf
12354#!/bin/bash
#QWE
qsdfe
qsdf
asdf
在第一列和第二列之间添加--
[root@bogon ~]# awk '{print $1"--"$2}' q.txt
192.168.1.139--
--
--
--
192.168.1.111--
--
--
192.168.1.121--
从小到大排序
[root@bogon ~]# sort q.txt
192.168.1.111
192.168.1.121
192.168.1.139
排序 r是逆序 从大到小
[root@bogon ~]# sort -nr q.txt
192.168.1.139
192.168.1.121
192.168.1.111
统计出现的次数 空格5就是有五行空格
[root@bogon ~]# sort q.txt | uniq -c
5
1 192.168.1.111
1 192.168.1.121
1 192.168.1.139
从历史命令中提取使用率最高的前五个命令
[root@bogon ~]# history | awk '{print $2}' | sort |uniq -c |sort -nr |sed -n '1,5p'
12 ifconfig
12 awk
7 sort
6 yum
3 sed
从历史命令中提取使用率最高的前五个命令
[root@bogon ~]# history | awk '{print $2}' | sort |uniq -c |sort -nr |awk 'NR<=5{print}'
12 ifconfig
12 awk
7 sort
6 yum
3 sed
命令修改配置文件方法
1. sed命令:
sed命令可以用来在文件中查找和替换文本。
例如,要将文件/etc/nginx/nginx.conf中的“worker_processes 1;”更改为“worker_processes 2;”,可以使用以下命令:
sudo sed -i 's/worker_processes 1;/worker_processes 2;/' /etc/nginx/nginx.confsed -i “1i asdfg” /etc 添加到第一行
2. awk命令:
awk命令可以用来处理文本文件中的数据。
例如,要将文件/etc/passwd中的所有用户的shell更改为/bin/bash,可以使用以下命令:
sudo awk -F: '{OFS=":"; $7="/bin/bash"} {print}' /etc/passwd > /tmp/passwd && sudo mv /tmp/passwd /etc/passwd
3. echo命令:
echo命令可以用来将文本输出到文件中。
例如,要将文本“Hello World”添加到文件~/test.txt的末尾,可以使用以下命令:
echo "Hello World" >> ~/test.txt
请注意,使用这些命令更改配置文件可能会导致配置文件中的语法 错误,因此在更改配置文件之前,请确保您知道自己在做什么,并备份原始文件。