Linux三剑客学习笔记
linux三剑客
文章目录
- linux三剑客
- 大纲
- 1.正则表达式
- 1.1什么是正则表达式
- 1.2应用场景
- 1.3正则表达式注意事项
- 1.4正则表达式符号
- 1.5正则VS通配符
- 1.6基础正则
- 1.6.1 ^以...开头的行
- 1.6.2 $ 以...结尾的行
- 1.6.3 ^$ 空行
- 1.6.4 .(点)表示任意一个字符
- 1.6.5 \ 转义字符
- 1.6.6 * 前一个字符连续出现0次或0次以上
- 1.6.7 .*所有内容,任何内容,任意内容
- 1.6.8 [] [abc] 1次匹配一个字符,匹配任何一个字符(a或b或c)
- 1.6.9 \[^abc] 取反,排除 排除a或b或c的内容,匹配a或b或c以外的内容
- 1.7 总结
- 1.8 扩展正则
- 1.8.1 \+ 前一个字符连续出现了1次或1次以上
- 1.8.2 | 或者
- 1.8.4 {}连续出现 o(n,m)前一个字母o至少连续出现n次,至多连续出现m次
- 1.8.4 ? 连续出现 前一个字符出现0次或者1次
- 2.三剑客
- 2.1 三剑客特点及应用场景
- 2.2 三剑客之grep
- 2.3三剑客之sed
- 2.4 三剑客之awk
大纲
- 正则表达式
- 是什么?应用场景
- 正则注意事项
- 规则
- 三剑客grep
- 三剑客sed
- 三剑客awk
1.正则表达式
1.1什么是正则表达式
- 匹配有规律的东西:手机号、身份证、匹配日志
- 正则表达式,regular expression(RE)
- 使用一些符号表达重复出现、大小写、开头/结尾含义
1.2应用场景
正则表达式 | Linux三剑客支持,开发语言(python,Golang等) |
---|---|
应用场景 | 过滤有规律的内容,尤其是日志 |
1.3正则表达式注意事项
- 所有的符号都是英文
- 学习正则,通过grep命令学习,给grep加上单引号
- 给grep,egrep加上颜色
alisa grep='grep --color=auto'
alias egrep='egrep --color=auto'
- 注意系统的字符集:en_US.UTF-8(大部分情况),如果出现问题修改字符集为
export LANG=C
- 快速掌握正则:配合grep -o参数学习
1.4正则表达式符号
分类 | 具体符号 |
---|---|
基础正则 | ^ $ ^$ . * .* [a-z] [^abc] |
扩展正则 | + | {} ? |
1.5正则VS通配符
分类 | 诞生目标(用途) | 支持的命令 |
---|---|---|
正则 | 三剑客,高级语言,进行过滤(匹配字符) | 三剑客grep,sed,awk,find,rename(ubuntu).expr |
通配符(pathname extension或glob) | 匹配文件(文件名) *.txt *.log | linux下大部分命令都支持 |
1.6基础正则
1.6.1 ^以…开头的行
grep '^wangc.com' wangc.txt
1.6.2 $ 以…结尾的行
grep 'wangc.com$' wangc.txt
cat -A
可以显示文件中隐藏的字符
1.6.3 ^$ 空行
- 这一行中没有任何内容(空格也是内容)
grep -v
排除grep -n
显示行号grep -o
可以显示过程grep -nv '^$' wangc.txt
1.6.4 .(点)表示任意一个字符
- 注意:.(点)不匹配空行
grep '.' wangc.txt
1.6.5 \ 转义字符
- \n 回车换行
- \t tab键
- 特殊符号需要使用转义字符
1.6.6 * 前一个字符连续出现0次或0次以上
- 连续出现:0(0出现一次) 00(0出现2次) 00000(0出现5次) wangc(字母出现了5次)
[root@nas01 ~]# grep 's*' backup.sh
#!/bin/bash
ftpserver="ip_address"
user="user"
passwd="passwd"
Wpath="path"
ftp -n -v $ftpserver << EOF
user $user $passwd
bin
put /opt/1.txt $Wpath/1.txt
bye
EOF
1.6.7 .*所有内容,任何内容,任意内容
grep '.*' backup.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-or5JrApM-1660053582282)(C:\Users\16664\AppData\Roaming\Typora\typora-user-images\image-20210925213802993.png)]
grep '^.*t' backup.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hKnUuqq8-1660053582283)(C:\Users\16664\AppData\Roaming\Typora\typora-user-images\image-20210925213938536.png)]
- 正则表达式的贪婪性:表示所有或连续出现的时候,表现尽可能的贪婪匹配
1.6.8 [] [abc] 1次匹配一个字符,匹配任何一个字符(a或b或c)
grep -o
可以显示匹配过程grep -i
不区分大小写
[root@nas01 ~]# grep '[awc]' backup.sh
[root@nas01 ~]# grep -o '[awc]' backup.sh
[root@nas01 ~]# grep '[A-Z]' backup.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MRj0hS0G-1660053582283)(C:\Users\16664\AppData\Roaming\Typora\typora-user-images\image-20210925215433963.png)]
匹配文件中的大小写字母和数字
[root@nas01 ~]# grep '[a-Z0-9]' backup.sh
[]中的内容会被去掉特殊含义
1.6.9 [^abc] 取反,排除 排除a或b或c的内容,匹配a或b或c以外的内容
1.7 总结
基础正则 Basic RE (BRE) | 含义 | 搭配 |
---|---|---|
^ | 以…开头的行 ^wangc | |
$ | 以…结尾的行 wangc$ | |
^$ | 空行 | 搭配^$ |
. | 任意一个字符 | |
* | 前一个字符连续出现(重复)0次或者0次以上 | |
.* | 所有内容 | 搭配.* |
\ | 转移字符 \n \t | |
[] | 一个整体,匹配任意一个符号[abc],a或b或c | []与 +搭配 |
[^] | 取反排除 | |
贪婪性 | .*或连续出现 |
1.8 扩展正则
扩展正则需要egrep
或者grep -E
符号 | |
---|---|
+ | 前一个字符连续出现了1次或1次以上 |
| | 或者 |
() | 一个整体.sed反向引用 |
{} | 连续出现 o(n,m)前一个字母o至少连续出现n次,至多连续出现m次 |
? | 连续出现 前一个字符出现0次或者1次 |
1.8.1 + 前一个字符连续出现了1次或1次以上
[root@nas01 ~]# grep 'c+' backup.sh
[root@nas01 ~]# grep -E 'c+' backup.sh
user="wc"
[root@nas01 ~]# egrep 'c+' backup.sh
user="wc"
[root@nas01 ~]#
1.8.2 | 或者
[root@nas01 ~]# egrep 'ft|us' backup.sh
ftpserver="192.168.1.2"
user="wc"
ftp -n -v $ftpserver << EOF
user $user $passwd
[root@nas01 ~]#
1.8.3 () 被括起来的内容,表示一个整体(一个字符)反向引用(反向引用sed)
[root@nas01 ~]# egrep 'pa(s|th)' backup.sh
passwd="123456"
Wpath="test"
user $user $passwd
put /opt/1.txt $Wpath/1.txt
1.8.4 {}连续出现 o(n,m)前一个字母o至少连续出现n次,至多连续出现m次
符号 | 含义 | |
---|---|---|
o(n,m) | 前一个字母o至少连续出现n次,至多连续出现m次 | >=n <=m |
o(n) | 前一个字母o连续出现n次 | ==n |
o(n,) | 前一个字母o至少连续出现n次 | >=n |
o(,m) | 前一个字母o最多连续出现m次 | <=m |
1.8.4 ? 连续出现 前一个字符出现0次或者1次
[root@nas01 ~]# cat wc.txt
goooood
good
god
gd
gooood
[root@nas01 ~]# egrep 'go?d' wc.txt
god
gd
[root@nas01 ~]#
2.三剑客
2.1 三剑客特点及应用场景
命令 | 特点 | 场景 |
---|---|---|
grep | 过滤 | grep命令过滤速度是最快的 |
sed | 替换,修改文件内容,取行 |
进行替换,修改文件 取出某个范围的内容(从早上1:00到2:00) |
awk | 取列,统计计算 |
取列 对比,比较 >= <= != < > 统计,计算(awk数组) |
2.2 三剑客之grep
选项 | 含义 |
---|---|
-E | == egrep 支持拓展正则 |
-A | after -A5 匹配你要的内容并且显示接下来的5行 |
-B | before -B5 匹配你要的内容并且显示上面的5行 |
-C | context 上下 -C5 匹配你要的内容并且上下的5行 |
-c | 统计出现了多少行 类似于wc -l |
-v | 取反,排除 |
-w | 精确匹配,加上\b**b\或者\<**\>可以表示边界 |
#特殊写法
[root@nas01 ~]# ps -ef | grep -c '[s]shd'
2
#此方式可以过滤掉grep执行时产生的进程
#执行时为grep '[s]shd'
#匹配的是sshd,故可过滤自身
2.3三剑客之sed
sed stream editor 流编辑器,sed把处理的内容或文件当作是水,源源不断的进行处理,知道文件末尾
sed格式
命令 参数/选项 功能 sed -r(支持拓展正则) ‘spd#’ sed命令核心功能:增删改查
功能 s 替换substitute sub p 显示print d 删除delete cai 增加c/a/i sed命令的执行过程
- “找谁干啥”
sed核心应用
1)sed-查找p
查找格式 | ||
---|---|---|
‘2p’ | 精确查找 | |
‘1,5p’ | 指定行号范围 | |
‘/内容/p’ | 类似于grep过滤,//里面可以写正则 | |
‘/10:00/,/11:00/p’ | 表示范围的过滤 |
2)sed删除d
查找格式 | ||
---|---|---|
‘2d’ | 删除第三行 | |
‘1,5d’ | 删除指定行号范围 |
案例:删除文件中的空行和包含#好的行
egrep -v '^$|#' /etc/ssh/sshd_config
sed -r '/^$|#/d' /etc/ssh/sshd_config
#!的妙用
[root@nas01 ~]# sed -nr '/^$|#/!p' /etc/ssh/sshd_config
#遇到空行或者#开头的行不显示
3)sed增加cai
命令 | ||
---|---|---|
c | replace替换这一行的内容 | |
a | append追加,向指定的行或每一行最佳内容 | |
i | insert插入,向指定的行或每一行插入内容(行前) |
案例:向config文件追加
UserDNS no
GSSAPIAUTCATION no
PermitRootLogin no
#方法一
cat >>config<<'EOF'
UserDNS no
GSSAPIAUTCATION no
PermitRootLogin no
EOF#方法二:sed
sed '$a UserDNS no\nGSSAPIAUTCATION no\nPermitRootLogin no' config
4)sed替换s
s–>sub substitute
g–>global全局替换,sed默认替换每行第一个匹配到的内容
替换格式(sg三个无特殊含义的相同字符) |
---|
s###g(例如s#1234#1232#g的含义为将1234替换为1232) |
s@@@g |
s///g |
后向引用.反向引用:先保护(使用小括号保护起来),后引用\n (\n为第几个小括号)
[root@nas01 ~]# echo 123456 |sed -r 's#(.*)#<\1>#g'
<123456>
[root@nas01 ~]# echo 123456 |sed -r 's#([1])#<\1>#g'
<1>23456
[root@nas01 ~]# echo 12a3c45gg6 |sed -r 's#([0-9])#<\1>#g'
<1><2>a<3>c<4><5>gg<6>
2.4 三剑客之awk
- 特点及应用场景
awk | |
---|---|
一门语言 | |
过滤,统计,计算 | |
过滤,统计日志 |
- 执行过程
awk -F,'BEGIN{print "name"}{print $2}END{print "end of file"}' test.txt
- 行与列
名词 | awk中叫法 | 说明 |
---|---|---|
行 | 记录record | 每一行默认通过回车分割 |
列 | 字段.域 field | 每一列通过空格分割 |
awk中行和列结束标记都是可以修改的 |
- 取行
awk | ||
---|---|---|
NR==1 | 取出某一行 | |
NR>=1&&NR<=5 | 取出1到5行 | |
符号 | > < >= <= == != | |
/wangc/ | 匹配关键字的行 | |
/wc/,/LL/ | 从/wc/行到/LL/行 |
- 取列
-F | 指定分隔符 | 指定每一列的结束标记(默认是空格/tab和连续空格) |
---|---|---|
$数字 | 取出某一列 | 注意在awk中$内容 |
$0 | 取整行 | |
{print xxx} | ||
$NF | 表示最后一列 |
[root@nas01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d2f8cf02d19 nginx "/docker-entrypoint.…" 6 days ago Up 6 days 80/tcp determined_moore
[root@nas01 ~]# docker ps -a | awk '{print $1}'
CONTAINER
7d2f8cf02d19
[root@nas01 ~]# docker ps -a |grep 'nginx' | awk '{print $1}'
7d2f8cf02d19
[root@nas01 ~]# docker ps -a | awk '{print $1,$2}' | column -t
CONTAINER ID
7d2f8cf02d19 nginx
column -t 将文本对齐
- 内置变量
NR | Number of Record | 行号 |
---|---|---|
NF | Number of Field | |
FS | -F: === -v FS=: Field Separator字段分隔符,每个字段结束标记 | |
OFS | Output Field Separator 输出字段分隔符 |
[root@nas01 ~]# awk -F: '{print $NF,$2,$3,$1}' /etc/passwd
/bin/bash x 0 root
/sbin/nologin x 1 bin
/sbin/nologin x 2 daemon
/sbin/nologin x 3 adm
/sbin/nologin x 4 lp
/bin/sync x 5 sync
/sbin/shutdown x 6 shutdown
/sbin/halt x 7 halt
/sbin/nologin x 8 mail
/sbin/nologin x 11 operator
/sbin/nologin x 12 games
/sbin/nologin x 14 ftp
/sbin/nologin x 99 nobody
/sbin/nologin x 192 systemd-network
/sbin/nologin x 81 dbus
/sbin/nologin x 999 polkitd
/sbin/nologin x 74 sshd
/sbin/nologin x 89 postfix
/sbin/nologin x 25 named
/sbin/nologin x 38 ntp
[root@nas01 ~]# awk -F: -vOFS=:'{print $NF,$2,$3,$1}' /etc/passwd
^C
[root@nas01 ~]# awk -F: -vOFS=: '{print $NF,$2,$3,$1}' /etc/passwd
/bin/bash:x:0:root
/sbin/nologin:x:1:bin
/sbin/nologin:x:2:daemon
/sbin/nologin:x:3:adm
/sbin/nologin:x:4:lp
/bin/sync:x:5:sync
/sbin/shutdown:x:6:shutdown
/sbin/halt:x:7:halt
/sbin/nologin:x:8:mail
/sbin/nologin:x:11:operator
/sbin/nologin:x:12:games
/sbin/nologin:x:14:ftp
/sbin/nologin:x:99:nobody
/sbin/nologin:x:192:systemd-network
/sbin/nologin:x:81:dbus
/sbin/nologin:x:999:polkitd
/sbin/nologin:x:74:sshd
/sbin/nologin:x:89:postfix
/sbin/nologin:x:25:named
/sbin/nologin:x:38:ntp
- awk模式匹配
- 比较符号:
- 正则
- 范围 表达式
- 特殊条件:BEGAN和END
awk | -F"[ /]+" | 'NR==3{print $3} |
---|---|---|
命令 | 选项 | ‘条件(动作)’ |
‘找谁(干啥)’ | ||
‘模式(动作)’ | ||
‘pattern(action)’ |
正则 | awk正则 |
---|---|
^ 表示以…开头的行 | 某一列的开头 $3~/^wc/ |
$ 表示以…结尾的行 | 某一列的结尾 2/wcLL2~/wcLL2 /wcLL/ |
^$ 表示空行 | 某一列是空的 |
[root@nas01 ~]# cat wc.txt
http://www.wangc.com/index.html
http://dns.wangc.com/i1.html
http://servers.wangc.com/dns.html
http://dns.wangc.com/2.html
http://www.wangc.com/error.html
http://www.wangc.com/i505.html
[root@nas01 ~]# awk -F'[/.]+' '{array[$2]++}END{for(i in array)print i,array[i]}' wc.txt
servers 1
www 3
dns 2
[root@nas01 ~]# awk -F'[/.]+' '{array[$2]++}END{for(i in array)print "域名",i,"次数",array[i]}' wc.txt
域名 servers 次数 1
域名 www 次数 3
域名 dns 次数 2
[root@nas01 ~]# awk -F'[/.]+' '{array[$2]++}END{for(i in array)print "域名",i,"次数",array[i]}' wc.txt | sort -snk4
域名 servers 次数 1
域名 dns 次数 2
域名 www 次数 3
- awk使用多个条件的时候,第一个条件一般使用’条件{动作}',其他条件则使用if语句
awk [options] [BEGIN]{program}[END] [file]
常用命令
-F fs 指定秒回一行数据字段的文件分隔符 默认为空格
-f file
内置变量
$0 表示整行
$1 表示文本行的第一个数据字段
$2 表示第二个数据字段
$N 表示第N个数据字段
$NF 表示文本的最后一个数据字段
NR 指定行号
NR==1
Linux三剑客学习笔记相关推荐
- linux系统管理学习笔记之三----软件的安装
linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02 标签:linux 系统管理 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...
- linux系统管理学习笔记之一-------linux解压缩命令
linux系统管理学习笔记之一-------linux解压缩命令 2009-12-29 11:52:55 标签:linux tar [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接 ...
- 操作系统进程学习(Linux 内核学习笔记)
操作系统进程学习(Linux 内核学习笔记) 进程优先级 并非所有进程都具有相同的重要性.除了大多数我们所熟悉的进程优先级之外,进程还有不同的关键度类别,以满足不同需求.首先进程比较粗糙的划分,进程可 ...
- linux系统管理学习笔记之八---进程与作业的管理
linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...
- linux系统管理学习笔记之八---linux文件与目录的管理及权限
linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...
- 韩顺平Linux教程学习笔记
Linux系统学习笔记 新装了deepin v23系统,结果磁盘没设置好,玩崩了,百度半天修复不了,看看韩顺平老师的Linux操作课程,做做笔记(只记录对自己有用的). B站网址 基础篇·Li ...
- Linux操作系统学习笔记【入门必备】
Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...
- 【韩顺平Linux】学习笔记1
[韩顺平Linux]学习笔记1 一.网络连接的三种方式 二.虚拟机克隆 三.虚拟机快照 四.虚拟机迁移和删除 五.VMtools 六.Linux目录结构 七.远程登录和文件传输 一.网络连接的三种方式 ...
- Linux+javaEE学习笔记之Linux网络环境配置
Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...
最新文章
- wps电脑版_WPS的前前前前身,是一根绳子?懂点历史没坏处
- 关于大型站点技术演进的思考(七)--存储的瓶颈(7)
- JDBC进阶:调用数据库,将文件或其他字节文件存入数据库,再从数据库取出写回硬盘
- matlab中删除照片_如何使用matlab从图像中删除划痕
- vue源码学习--vue源码学习入门
- Spring boot 启动过程
- python合并数组输出重复项_python - 不同数组项的所有可能组合[重复] - 堆栈内存溢出...
- maven开发web项目的福音,runJettyRun插件使用
- 杰·亚伯拉罕的产品营销35种策略完整版
- 毕业论文查重注意事项论文检测查重原理(以PaperPass为例)
- (转)TTime, TDateTime
- C相关笔试题或者面试题中的概念以及技巧题2
- Microsoft Store连不上网解决办法
- 2019北京物联网智慧城市大数据博览会开启中国之路
- 红豆熟了之后会生出什么呢?
- 多个并列的if条件句和if-elif的区别
- jmeter 运行接口报javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection的解决方法
- Emby识别都是英文海报
- linux 格式化 sda,linux – 如何将/ dev / sda挂载并格式化为不同的/ dev / name?
- java版本CRC校验(CRC-16/X25)
热门文章
- QQ跨站漏洞巧利用一例【强迫别人帮你买QQ秀】【应该以失效】
- unity通过浏览器打开网页
- mysql 查看碎片_MYSQL 碎片查询
- RAID(独立磁盘冗余阵列)
- 细说上帝视角游戏的快速创建
- 搭建自己的仿真环境和机器人(turtlebot2+velodyne)(一)
- Lottie 免费动画、在线预览
- 深度学习笔记-----YOLOV4框架结构大讲解
- 理想电压源VS实际电压源、理想电流源VS实际电流源
- KeilC51_v960版201905((含汉字补丁,STC15说明书,stc-isp-15xx-v6.86S).7z