【linux系统】命令学习(五)linux三剑客 grep \ awk \ sed
grep----基于正则表达式查找满足条件的行
1、内容检索
获取行 grep pattern file
获取内容 grep -o pattern file
获取上下文grep -A -B -C pattern file
grep a file 查找包含a的行
grep -o "1$" file 获取包含1的行,且打印1
grep -o " [0-9]*1$ file 获取空格开头+多个数字+1结尾的字符内容
grep -B1 "2" file 取值除了包含当前行,还会取值当前行前一行的数据;
grep -E 选项可以用来扩展选项为正则表达式
2、文件检索
递归搜索 grep pattern -r dir/
展示匹配文件名 grep -H 111 dir/1
只展示匹配文件名 grep -1 111 /tmp/1
grep 111 -r 目录 查询目录下文件名为111的文件
3、范围约束
忽略带小写 grep -i pattern file
不显示匹配的行 grep -v pattern file
使用扩展正则表达式 grep -E pattern file
文件范围和目录范围约束 grep 111 -r /tmp/demo/ --include "11*"
4、进程检索
进程过滤场景比较特殊,需要注意
grep 本身会开启新进程,所以需要单独过滤掉grep进程
ps -ef | grep ssh
ps -ef | grep ssh |grep -v grep
awk----根据定位到的数据行处理其中的分段
1、基本语法
是linux下的一个命令,语言解析引擎;解析命令,直接进行执行;
具备完整的编程特性,比如执行命令,网络请求;
精通awk,是一个linux工作者的必备技能
语法awk 'pattern{action}' 匹配表达式、行为表达式 action 不写 默认为print
2、上下文变量
开始BEGIN 结束END -----初始化、汇总
行数NR -----
字段与字段数$1$2...$NFNF
整行$0
字段分隔符FS
输出数据的字段分隔符OFS
记录分隔符RS
输出字段的行分隔符ORS
3、字段变量用法
-F 参数指定字段分隔符,可以用|指定多个-多分隔符-F '<|>'
BEGIN{FS="_"}也可以表示分隔符
$0代表当前的记录
$1代表第一个字段
$N代表第N个字段
$NF代表最后一个字段
$(NF-1) 代表倒数第二个字段
4、pattern表达式
正则匹配
$1~/pattern/ ----字段匹配一个表达式
/pattern/ ----整行匹配
比较表达式
$2>2 $1 == "b"

awk '$1~/2/' 打印第一列中有2的行
5、正则匹配表达式案例
开始和结束 awk 'BEGIN{}END{}'
正则匹配
整行匹配 awk '/Running/'
字段匹配 awk '$2~/xxx/'
行数表达式
取第一行 awk 'NR==2'
去掉第一行 awk 'NR>1'
区间选择
awk '/aa/,/bb/'
awk '/1/,NR==2'
6、action行为表达式{action}
打印 {print $0}{print $2}
赋值 {$1='abc'}
处理函数
原始内容$0
更新后内容{$1=$1;print $0}
7、单行转多行

print 默认是换行符输出的
8、多行转为单行


9、计算平均数
设置变量total并初始化为0,以逗号为分隔符【字段分隔】,求第二列的总和,并输出总和除以行数

10、字典结构array【数组】
array 是稀疏矩阵,类似python的词典类型
统计多家机构的营业额
统计多级机头的营业额平均值
定义一个字典data,以第一列为为key,第三列为value进行累加,然后循环字典,打印key和value

定义两个字典 data 统计以第一列的key,第三列的总和 count 第一列的key 统计key出现的次数;在求对应的平均数

sed 定位并修改数据;注意:修改的不是源文件,只是修改了打印结果
1、基本语法
语法结构sed[addr]X[options] ----定位+表达式
-e 表达式
sed -n '2p' 打印第二行
sed 's#hello#word#' 修改
-i 直接修改源文件
-E 扩展表达式
-debug调试
2、正则表达式
行数与行数范围 20 30,35
正则匹配 /pattern/
区间匹配 //,//
打印第二行数据

打印第1行到第4行数据

匹配有a的行

3、action表达式
p打印,通常结合-n参数 sed -n '2p' ----使用频率较高
s查找替换:s/regexp/replacement/[flags] -----使用频率较高
d删除
a追加
c改变
i插入内容到匹配行之前
e执行命令
分组匹配与字段提取:sed 's#([0-9])|([a-z])#\1 \2 #'
4、行数操作
打印特定行 sed -n 2p
删除最后一行 sed '$d'
删除1到3行

5、S表达式
S表示替换
S后面的追加字符可以为任意字符
g表示全局匹配

& 表示匹配内容
:号前面加123
/符号可以被任意代替
把d替换为replaced

以3为结尾的,替换成100

6、反向引用
使用()对数据分组
使用\1\2反向引用分组

在abd前面增加123

在abd后面增加123

将abd后面替换为123

【linux系统】命令学习(五)linux三剑客 grep \ awk \ sed的更多相关文章
- linux基础命令学习五(软件包管理、下载管理)
Linux 软件包管理 本文主要是记录下RedHat系列的软件包管理. 内容分为以下二个部分:二进制包的管理,源代码包的管理 一.二进制包的管理 1.1概念 主要有RPM和YUM这两种包管理. 两 ...
- Linux三剑客-grep || awk || sed
grep是一个强大的文本搜索工具 命令格式: grep [option] pattren file -a 将二进制文档以文本方式处理 -c 计算找到的符合行的次数 -i 忽略大小写 -n 顺便 ...
- Linux 系统编程 学习:01-进程的有关概念 与 创建、回收
Linux 系统编程 学习:01-进程的有关概念 与 创建.回收 背景 上一讲介绍了有关系统编程的概念.这一讲,我们针对 进程 开展学习. 概念 进程的身份证(PID) 每一个进程都有一个唯一的身份证 ...
- linux基础命令学习笔记(二)
linux基础命令学习笔记(二) 1.kill :终止进程 kill pid (唯一标示一个进程) kill -9 强制终止 kill -15 命令未结束不能终止 # ps aux 查看所有进程 ...
- 一点点linux系统的学习心得
我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作( ...
- 安装虚拟机和Linux系统的学习
安装虚拟机和Linux系统的学习(随笔3) 1.安装虚拟机 首先我按着老师给的链接上的步骤一步一步安装VirtualBox,进行得十分顺利. 接着则是在虚拟机上安装Ubuntu. 然而安装完成以后按要 ...
- Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道
Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...
- Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号
Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号 背景 上一讲我们介绍了Unix IPC中的2种管道. 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道 ...
- Linux 系统编程 学习:04-进程间通信2:System V IPC(1)
Linux 系统编程 学习:04-进程间通信2:System V IPC(1) 背景 上一讲 进程间通信:Unix IPC-信号中,我们介绍了Unix IPC中有关信号的概念,以及如何使用. IPC的 ...
随机推荐
- .NET跨平台实践:.NetCore、.Net5/6 Linux守护进程设计
之前,我写过两篇关于用C#开发Linux守护进程的技术文章,分别是<.NET跨平台实践:用C#开发Linux守护进程>和<.NET跨平台实践:再谈用C#开发Linux守护进程 - 完 ...
- Docker里面没有你期望的命令、甚至没有yum怎么办?
分享小知识点 跟大家分享一个实用的小知识点 有时候在docker容器里面不仅没有你期望的那些常用的命令,甚至没有yum命令让你去安装那些常用的命令 怎么办呢?不要慌! 没有yum命令说明这个容器的系统 ...
- Data Management Tools(数据管理工具)《二》
(数据管理工具)<二> 点击跳转(数据管理工具)<一> 16.打包 # Process: 共享包 arcpy.SharePackage_management("&qu ...
- c语言中一条竖线是什么符号?
"|"在C语言中表示按位或,是双目运算符.其功能是参与运算的两数各对应的二进位(也就是最后一位)相或.只要对应的二个二进位有一个为1时,结果位就为1.参与运算的两个数均以补码出现. ...
- 对比7种分布式事务方案,还是偏爱阿里开源的Seata,真香!(原理+实战)
前言 这是<Spring Cloud 进阶>专栏的第六篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得了? 阿里面 ...
- 剑指offer:JZ12 矩阵中的路径
JZ12 矩阵中的路径 描述 请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上, ...
- 封装一个简单的ajax请求
记录自己第一次封装ajax,肯定有很多考虑不周到,如有错误请指出,本人必将虚心改正. /** * * @param {Object} obj =>header:请求头:url:请求地址:meth ...
- 运维常用python库&模块
sutil:是一个跨平台库(https://github.com/giampaolo/psutil)能够实现获取系统运行的进程和系统利用率(内存,CPU,磁盘,网络等),主要用于系统监控,分析和系统资 ...
- 嵌入式单片机stm32之DMA实验
一. 对于大容量的STM32芯片有2个DMA控制器,控制器1有7个通道,控制器2有5个通道 每个通道都可以配置一些外设的地址. 二. 通道的配置过程: 1. 首先设置CPARx寄存器和CMARx寄存器 ...
- vim vi 高亮第80列 Python PEP8规范 行最大长度设置
命令模式下 :set cc=80 或者 打开 vim的配置 文件 .vimrc vim ~/.vimrc 接着你会看到你的配置文件 在配置文件中加上这样行配置代码 set cc=80 ok 现在退出v ...