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三剑客学习笔记相关推荐

  1. linux系统管理学习笔记之三----软件的安装

    linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02 标签:linux 系统管理 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  2. linux系统管理学习笔记之一-------linux解压缩命令

    linux系统管理学习笔记之一-------linux解压缩命令 2009-12-29 11:52:55 标签:linux tar [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接 ...

  3. 操作系统进程学习(Linux 内核学习笔记)

    操作系统进程学习(Linux 内核学习笔记) 进程优先级 并非所有进程都具有相同的重要性.除了大多数我们所熟悉的进程优先级之外,进程还有不同的关键度类别,以满足不同需求.首先进程比较粗糙的划分,进程可 ...

  4. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  5. linux系统管理学习笔记之八---linux文件与目录的管理及权限

    linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...

  6. 韩顺平Linux教程学习笔记

    Linux系统学习笔记   新装了deepin v23系统,结果磁盘没设置好,玩崩了,百度半天修复不了,看看韩顺平老师的Linux操作课程,做做笔记(只记录对自己有用的).   B站网址 基础篇·Li ...

  7. Linux操作系统学习笔记【入门必备】

    Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...

  8. 【韩顺平Linux】学习笔记1

    [韩顺平Linux]学习笔记1 一.网络连接的三种方式 二.虚拟机克隆 三.虚拟机快照 四.虚拟机迁移和删除 五.VMtools 六.Linux目录结构 七.远程登录和文件传输 一.网络连接的三种方式 ...

  9. Linux+javaEE学习笔记之Linux网络环境配置

    Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...

最新文章

  1. wps电脑版_WPS的前前前前身,是一根绳子?懂点历史没坏处
  2. 关于大型站点技术演进的思考(七)--存储的瓶颈(7)
  3. JDBC进阶:调用数据库,将文件或其他字节文件存入数据库,再从数据库取出写回硬盘
  4. matlab中删除照片_如何使用matlab从图像中删除划痕
  5. vue源码学习--vue源码学习入门
  6. Spring boot 启动过程
  7. python合并数组输出重复项_python - 不同数组项的所有可能组合[重复] - 堆栈内存溢出...
  8. maven开发web项目的福音,runJettyRun插件使用
  9. 杰·亚伯拉罕的产品营销35种策略完整版
  10. 毕业论文查重注意事项论文检测查重原理(以PaperPass为例)
  11. (转)TTime, TDateTime
  12. C相关笔试题或者面试题中的概念以及技巧题2
  13. Microsoft Store连不上网解决办法
  14. 2019北京物联网智慧城市大数据博览会开启中国之路
  15. 红豆熟了之后会生出什么呢?
  16. 多个并列的if条件句和if-elif的区别
  17. jmeter 运行接口报javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection的解决方法
  18. Emby识别都是英文海报
  19. linux 格式化 sda,linux – 如何将/ dev / sda挂载并格式化为不同的/ dev / name?
  20. java版本CRC校验(CRC-16/X25)

热门文章

  1. QQ跨站漏洞巧利用一例【强迫别人帮你买QQ秀】【应该以失效】
  2. unity通过浏览器打开网页
  3. mysql 查看碎片_MYSQL 碎片查询
  4. RAID(独立磁盘冗余阵列)
  5. 细说上帝视角游戏的快速创建
  6. 搭建自己的仿真环境和机器人(turtlebot2+velodyne)(一)
  7. Lottie 免费动画、在线预览
  8. 深度学习笔记-----YOLOV4框架结构大讲解
  9. 理想电压源VS实际电压源、理想电流源VS实际电流源
  10. KeilC51_v960版201905((含汉字补丁,STC15说明书,stc-isp-15xx-v6.86S).7z