首页 > 其他分享 >文本三剑客--基础

文本三剑客--基础

时间:2022-10-14 17:36:43浏览次数:66  
标签:txt grep -- xz 正则 sed awk 文本 三剑客

通配符

符号 作用
* 所有
? 任意一个字符
{} 生成序列
[] [a-z]
[^] 排除
  • 通配符*
*.txt  *.log
  • 通配符{}
file{01..100}
备份一个文件
cp abc{,.bak}

特殊符号

引号
单引号 所见即所得,引号内的内容原封不动的输出(多数命令)
双引号 与单引号类似,但是特殊符号会被解析运行
不加引号 与双引号类似,支持通配符
反引号 优先执行反引号里面的命令

正则表达式(regular expression RE)

  • 匹配字符:手机号,身份证号,邮箱

  • 主要匹配字符(三剑客)

  • 与通配符不同

  • 基础正则 BRE

  • 扩展正则 ERE

正则分类
基础正则 ^ $ ^$ . * .* [] [^]
扩展正则 | + {} () ?

通配符和正则表达式区别

区别 处理目标 支持命令
通配符 文件,目录 处理的是参数 linux大部分支持
正则表达式 进行过滤,在文件中查找内容,处理的是字符 linux三剑客,python,Golang

基础正则BRE

以my开头的
grep '^my' a.txt
以448结尾的内容
grep '448$' a.txt
cat -A 查看文件结尾的空格
匹配空行(没有,空格也没有)
grep '^$'
grep -n 增加行号
grep -v 排除

\ 转义字符:去掉特殊含义
以.结尾
grep '\.$' 
转义字符系列
\ 去掉特殊含义
\n 换行符
\t 制表符,tab键
echo -e 'html \n saf'
不加-e不支持
  • 正则表达式*
    • 前一个字符出现0次或者0次以上
8
555 出现三次
6666 出现四次
贪婪性:出现尽可能多的匹配
  • 正则表达式 .*所有字符,不限长度,字符
以任意开头,有o
grep '^.*o'
以n开头,.结尾
grep '^n.*\.$'
  • 正则表达式[]
[abc]匹配a或者b或者c中任意一个,一次只找到一个
grep '[a-z]'
不区分大小写
grep -i '[a-z]'或者grep '[a-zA-Z]'
  • 正则表达式[^] [^abc] 匹配不是b不是a不是c的内容(排除a,b,c)

扩展正则ERE

  • 正则 + 前一个字符出现1次或者1次以上
  • \将只支持基础正则的支持扩展正则
过滤连续出现的数字
grep '[0-9]+'
连续出现的字母
[a-zA-Z]+
  • 扩展正则| 或者
|不同于管道
与[]区别
| 或者 单词,字符,长内容
[a-z] 或者 某个字符
  • 扩展正则{} a{n,m} 前一个字符a,出现的次数最少n,最多m
匹配出现3次的数字
[0-9]{3}
匹配身份证号
前17为是数字
最后一位是数字或者X
[0-9]{17}[0-9X]$
{,m}
{n,}
  • 扩展正则(),括起来的相当于一个整体;sed命令中的后向引用(反向引用)

  • 扩展正则? 前一个字符出现一次或者0次

扩展正则(ERE)总结

ERE
+ 前一个字符出现一次或者多次
| 或者会
{} 出现次数
() 1.整体;2.反向引用
? 前一个字符出现一次或者0次

正则总结

出现次数

+ 1次或者1次以上
{} 任意次数
* 任意次数
前一个字符出现1次或者0次

整体(或者)

[] [abc]出现单次
()
[^]
|
常用正则表达式
邮箱的正则表达式:[a-zA-Z0-9._]+@[a-zA-Z0-9._]+\.[a-zA-Z0-9]{1,3}
手机号的正则表达式:^(13[0-9]|14[5-9]|15[0-35-9]|16[25-7]|17[0-8]|18[0-9]|19[0135689])[0-9]{8}$
IP地址的正则表达式:^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$

grep 命令选项

-n 显示行号
-v 排除匹配的选项
-i 不区分大小写
-o 显示执行过程
grep -E == egrep 扩展正则
-w 精确过滤
精确过滤,只显示过滤的
grep -w 'xz'
查找文件值含有字符的文件
grep 'xz' `find /etc/`:反引号有限执行
简单过滤
grep -R 'xz' /etc
只显示文件名
grep -Rl 'xz' /etc/

sed命令选项

  • 增删改查
  • 取行,替换,查找

sed + 条件 + 指令

执行流程

  • 读取一行,存放至内存
  • sed判断是否满足条件
    • 满足,执行指令
    • 不满足,读取下一行
  • 默认读取完最后一行结束

sed查询

sed命令格式 选项 ‘找谁干啥’ 文件
3p
-n 取消默认输出,一般和p一起使用
sed命令默认显示文件所有内容
sed -n '3P' s.txt
显示行数
sed -n '2,4p' xz.txt

模糊查询
sed -n '/xz/p' xz.txt(支持正则,不支持扩展正则 -r)

显示行数 范围
sed -n '/100/,/105/p'  xz.txt

案例
查看11:03:00到11:30:00的日志内容
1.过滤是否存在
grep '11:03:00'
2.sed查找范围
sed -n '/11:03:00/,/11:30:00/p'

wc -l
显示行数


sed删除

  • p print 显示
  • d delete 删除 按行删除
扩展正则
删除含有xz和we的
sed -r ‘/xz|we/d’ 

删除多行,范围
sed '2,5d' 

sed增加

  • 类似 >>
  • 增加 cia
1. i 在第1行前面插入
sed '2i hello world ' xz.txt

2. a 在第1行后面添加
sed '2a hello world ' xz.txt

3. c 替代,将第2行内容替换,整行
sed '2c hello world' zx


sed -i 修改文件内容,不显示出来
sed -i.bak 修改文件,会提前备份

sed替换

sed 's/目标/替换成what/g'
斜线不限,可以用其他字符替换

删除数字,只删除数字,不删除字母之类的
sed 's/[0-9]//g'


将文件第2行的大写字母替换
sed '2s/[A-Z]//g'
g :满足条件,全部删除;否则只删除第一个

sed后向引用

后面使用前面分组的东西被称为反向引用
sed 命令中使用()分组,然后在后面使用\n  n为数字,引用分组

使用案例
 123456   变为 <123456>
 echo 123456  | sed -r 's/(.*)/<\1>/g' xz.txt
 
 123456   变成  <1><2><3><4><5><6>
 echo 123456 | sed -r 's/(.)/<\1>/g'  xz.txt
 
 案例
 面试题
 将第一列和最后一列换位置
 sed  's/^[a-z-]:/:(.*):/.*$/\3/\2/\1'

image-20220723190132091

sed总结

查询
删除
反向引用

awk

1.执行流程
2.awk取行和取列
3.awk精确过滤
4.awk统计方法
  • 取行与取列
行    记录			    NR
列    字段(域)		 

取行
取第2行
awk 'NR==2' xz.txt

取第2到第5行
awk 'NR<=5 && NR>=2' xz.txt

模糊查询
awk '/dawd/' xz

从包含xz 到we的行
awk '/xz/,/we/'

显示最后一行

  • 内置规则
NR 记录号(Record Number)
NF 列数(number of field)
$0 表示整行
取列 /etc/hosts文件中的信息
默认使用空格分隔
awk '{print $i}'
$NF:最后一列

指定分隔符:
awk -F:文件| column -t对齐

指定多个分隔符
awk -F'[ /]+' '{print $3}'
  • 精确过滤
特殊BEGIN()和END()
1.过滤包含dd的内容
awk '/dd/'

2.去除文件中第三列以数字1开头的行
awk '{$3} ~/^1/{print $1}'  xz
~:表示包含,支持正则表达式


3.不包含内容
awk '!/dd/'

4.删除文件中的空行(tab键和空格开头)
cat -A,可以在行结尾添加$
awk '!/[	 ]+/'	xz

5./从哪里来/,/到哪里去/
awk '$4~/11:25/,$4~/11:55/'
  • BEGIN()和END()
BEGIN() BEGIN的内容会在awk读取文件前执行 使用频率低,测试awk功能
END() END里面的内容会在awk读取完文件之后执行 输出结果
1.显示passwd第1列和第3列减伤name uid
awk -F: 'BEGIN{"name","uid"} {print $1 $3}' passwd

2.统计 /etc/service空行
awk '/^$/' /etc/service |wc -l

awk '/^$/{i++ ;print i}' 
显示多个
awk '/^$/{i++}END{print i}'  

3.求和案例
seq 100 |awk '{sum=sum+$0}{print sum}'

4.统计log中使用的流量
awk '{sum+=$10}END{print sum/1024/1024}'

标签:txt,grep,--,xz,正则,sed,awk,文本,三剑客
From: https://www.cnblogs.com/zlwsxhn/p/16792359.html

相关文章

  • 数据库第三次作业-新增数据
    目录​​1.教师表teacher​​​​1.1指定字段插入数据​​​​1.2所有字段插入数据​​​​1.3所有字段批量插入数据​​​​1.4指定字段批量插入数据​​​​1.5查看教师......
  • 数据库第二次作业
    教师表teacher字段名数据类型长度(字节数)是否可null默认值主、外键其他约束备注信息NOCHAR4主键教师号NAMEVARCHAR10否教师姓名PROFVARCHAR20否assistant职称SALINT2否工资C......
  • java中的稀疏数组
    Java的稀疏数组本节内容的主要需要注意的是数组转换时的下标packagearray;​publicclassArrayDemo06{  //创建一个二维数组11*110:没有旗子1:黑棋2:白棋......
  • 第三章 顺序结构程序设计习题【原始版手机编辑,转换电脑数据混乱,看水印】
     声明三个长整型的变量为x,y,z;把5的值赋给x,把6的值赋给n;根据数学式对应的c语言表达式给y赋值;输出y,此时就是表达式的值。声明两个整数类型m和n,并赋值1和2;利用复合运算......
  • C语言思维导图前五章总结(超详细,复习必备)
    源文件在process on(在线流程图)上面,和这个同一个名字哦。......
  • 解决C语言中scanf()、strcpy()函数报错问题。
    在C语言的学习中,使用VisualStudio2019编译器中的scanf()、strcpy()函数和一些数组里的函数会报错,这是编译器预处理没有设置好,下面看一下如何设置。先找到源文件中自己的项......
  • playwright 安装失败:command not found: playwright
    解决办法InstallthePytestplugin:pip3installpytest-playwrightInstalltherequiredbrowsers:python3-mplaywrightinstall......
  • Jmeter无界面操作
    1、启动nmon: $./nmon-fT-s30-c60//(每30秒抓一次,抓60次,大概30分钟,因为一般都测试30分钟) 2、启动Jmeter: $./jmeter-n-ttest.jmx-llog.jtl 3、生成......
  • 数据库第十三次作业 事务管理【带源码】
    目录​​一、新建数据库​​​​二、事务的提交​​​​ 1.事务的隔离级别​​​​1.1脏读 ​​​​1.2演示脏读 ​​​​1.3设置b账户中事务的隔离级别 ​​​​1.4.验......
  • 数据库第十次作业-视图【带源码】
    目录​​1.创建视图“view_info”,查询所有员工姓名、员工联系电话、车间地址、车间主任姓名、主任联系方式​​​​2.查看“view_info”视图字段信息​​​​3.创建视图“v......