Shell 脚本系列 | shell三剑客

目录

    • 1、三剑客介绍
    • 2、三剑客之—grep
      • 1. 常用参数
      • 2. 常用示例
        • 1.过滤以#开头的行和空白行
        • 2.找出所有的mp3文件包含艺术家jayZ,不包含remix
        • 3.计算匹配项的数目
        • 4.在匹配字符串周围打印出行
        • 5.匹配显示所有IP
    • 3、三剑客之一sed
      • 1.常用参数
      • 2.常用示例
        • 1. 奇数行后增加
        • 2. 删除注释的行
        • 3.插入
        • 4.替换
    • 4、三剑客之一awk
      • 1.常用参数
      • 2.常用示例
        • 1.自定义输出内容
        • 2.显示文件的第n行
        • 3.通过管道符、双引号调用shell命令
        • 4.BEGIN,END模式

1、三剑客介绍

"Shell三剑客"是指在Linux/Unix系统下使用最广泛的三个命令行工具:grep、sed和awk。它们都是文本处理工具,可以用于快速搜索、替换和处理大量文本数据。

命令特点使用场景
grep擅长查找过滤快速查找过滤
sed擅长取行和替换需要快速进行替换/修改文件内容
awk擅长取列、统计计算文件取列、数据切片、对比/比较和统计

shell三剑客通常要与正则表达式一起使用
下面是一些常用的正则表达式元字符:

.:匹配任意单个字符(除了换行符)。
*:匹配前面的字符0次或多次。
^:匹配行的开头。
$:匹配行的结尾。	
[ ]:匹配方括号中的任何一个字符。例如,[abc]匹配"a"、"b"或"c"。
[^ ]:匹配不在方括号中的任何字符。例如,[^0-9]匹配任何非数字字符。
{n,m}:最少匹配n次,最多匹配m次
|:或者。匹配|前后的任意一项。

2、三剑客之—grep

1. 常用参数

-n:显示行号;
-i:忽略大小写;
-o:精准匹配;
-f:从文件每一行获取匹配模式;
-c:统计匹配的行数;
-w:匹配 整个单词;
-E:使用扩展正则表达式,相当于egrep;
-F :相当于fgrep,就是将pattern视为固定字符串。
-v:反转查找,显示不被 pattern 匹配到的行,相当于[^] 反向匹配;
-A:后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B:后面可加数字,为 before 的意思,除了列出该行外,前面的 n 行也列出来;
-C:后面可加数字,为context 的意思,除了列出该行外,前后的n行也列出来。

2. 常用示例

1.过滤以#开头的行和空白行
egrep -v "^#|^$"   文本文件  
2.找出所有的mp3文件包含艺术家jayZ,不包含remix

//要找出艺术家jayZ的所有mp3格式的音乐文件,里面也不要有任何混合音轨-remix

find . -name ".mp3" | grep -i JayZ | grep -vi "remix"
3.计算匹配项的数目
#类似于将grep输出的结果用管道传送给计数器(wc程序)
cat /etc/passwd| grep -c nologin

在这里插入图片描述

4.在匹配字符串周围打印出行
cat /etc/passwd| grep -A 2 mail #打印出前面匹配的n行
cat /etc/passwd| grep -B 2 mail #打印出后面匹配的n行
cat /etc/passwd| grep -C 2 mail #打印出两个方向都匹配的n行

在这里插入图片描述

5.匹配显示所有IP
ip a|egrep  -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"

在这里插入图片描述

3、三剑客之一sed

1.常用参数

 -n:不打印模式空间;-e:执行脚本、表达式来处理;-f:执行动作从文件读取执行;-i:修改原文件;-r:使用扩展正则表达式。动作说明:
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d:删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p:打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s:取代,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 。

2.常用示例

1. 奇数行后增加
echo -e "1\n2\n3\n4\n5" | sed "1~2 a www"
#1~2奇数,1~2!偶数

在这里插入图片描述

2. 删除注释的行
echo -e "#todo\ndef s\nputs 'b'\nend" | sed "/^#/d"

在这里插入图片描述

3.插入

i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)

echo -e "1\n2\n3\n4\n5" | sed "1 i aaa"

每一行插入 ‘

sed -i "s/^/\'/g"   test.txt
4.替换
替换每行第一个is 为was:
sed 's/is/was/1' pets.txt
替换每行全部is为was 
sed 's/is/was/g' pets.txt
替换偶数行 is为was 
sed '1~2! s/is/was/g' pets.txt
覆盖原文件 
sed -i '1~2! s/is/was/g' pets.txt

4、三剑客之一awk

1.常用参数

-F	指定分割字段符
-v	定义或修改一个awk内部的变量
-f 	从脚本文件中读取awk命令

内建变量

FS:列分隔符。指定每行文本的字段分隔符,默认为空格或制表位,与“ -F ”作用相同OFS:输出分隔符。指定输出字段间的分隔符。RS:行分隔符。awk从文件读取资料时,将根据RS的定义把资料切割为多条记录,
awk一次仅读取一条记录,以进行处理,预设值为 \n (换行符)NF:当前处理行的字段个数NR:当前处理行的行号FNR:awk当前读取的记录数,其变量值小于等于NR
(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件$0:当前处理行的整行内容$n:当前处理行的第 n 个字段(第 n 列)FILENAME:被处理的文件名

2.常用示例

1.自定义输出内容
awk,必须外层单引号,内层双引号内置变量$1、$2都不得添加双引号,否则会识别文本,尽量别添加引号awk -F: '{print "第一列",$1,"第二列",$2}' /etc/passwd

在这里插入图片描述

2.显示文件的第n行
#显示文件2-5行内容
awk 'NR==2,NR==5' passwd

在这里插入图片描述

#显示文件2-5行且输出行号
awk 'NR==2,NR==5 {print NR,$0}' passwd 

在这里插入图片描述

#显示文件的第一列,倒数第二和倒数第三列
awk '{print $1,$(NF-1)}' test.txt 
awk '{print $1,$(NF-1),$(NF-2)}' test.txt

在这里插入图片描述
3.结果指定分隔符

#输出第1和第3个字段,输出结果默认以 空格 分隔
awk -F ":" '{print $1,$3 }' passwd
awk -F ":" '{print $1","$3 }' passwd
awk -F ":" '{print $1"=="$3 }' passwd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.通过管道符、双引号调用shell命令

1.统计行数

awk -F ":" '/bash$/{print}' passwd 
root:x:0:0:root:/root:/bin/bash
y:x:1000:1000:y:/home/y:/bin/bash
lisi:x:1001:1001::/home/lisi:/bin/bash
#调用 wc -l 统计使用bash的行数
awk -F ":" '/bash$/{print|"wc -l"}' passwd 
3

2.查看当前内存使用百分比

#查看当前内存使用百分比
free -m | awk '/Mem:/{print int($3/($3+$4)*100)"%"}'
87%

3.查看当前cpu空闲率

# -b -n 1 表示只需要1次输出结果
top -b -n 1 | grep Cpu
%Cpu(s):  2.9 us,  2.9 sy,  0.0 ni, 96.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 
#输出cpu空闲率的字段
top -b -n 1 | grep Cpu | awk -F "," '{print $4}'
96.9 id
#输出Cpu空闲率
top -b -n 1 | grep Cpu | awk -F "," '{print $4}' | awk '{print$1}'
96.9
4.BEGIN,END模式

BEGIN模式:在处理指定文本之前,需要先执行BEGIN模式中的指定的操作。

END模式:在处理指定文本结束后,需要执行END模式中的指定操作
在这里插入图片描述

#统计以 e 结尾的行
awk 'BEGIN{x=0}; /e$/{x++};END{print x}'

在这里插入图片描述


#统计以冒号分隔的文本段落数,END{}语句块中,往往会放入打印结果等语句
echo $PATH | awk 'BEGIN{RS=":"}{print NR,$0};END{print NR}'

在这里插入图片描述
过滤文本中重复行数

cat b.txt
aaa
bbb
ccc
aaa
aaa
aaa
bbb
bbb
ccc
#将文本的内容作为数组下标,a[$1]++表示出现相同的行,就自加1
awk '{a[$1]++}END{for (i in a){print i,a[i]}}' b.txt
aaa 4
ccc 2
bbb 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/483647.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机 安装 centos7 带桌面

虚拟机 安装 centos7 流程 https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ CentOS-7-x86_64-DVD-2009.iso vmware 安装 centos7 的时候, 如果 不是 选择的 稍后 安装操作系统 , 会不让你选择配置选项,自动帮你把系统…

百度地图海量点方案趟坑记录(百度地图GL版 + MapVGL + vue3 + ts)

核心需求描述 不同层级有不同的海量图标展示底层海量图标需要展示文字拖动、放大缩小都需要重新请求数据并展示固定地图中心点(拖动、放大缩小,中心点始终在地图中心) 示例图片:(某些图片涉及公司数据,就未…

【力扣 - 翻转二叉树】

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 提示&#xff1a; 树中节点数目范围在 [0, 100] 内 -100 < Node.val < 100题解&#xff1a;递归 思路与算法 这是一道很经典的二叉树问题。显然&#xff0c;我们从…

Nginx配置组成与性能调优

目录 一、Nginx配置介绍 1. 模块组成 2. 图示 3. 相关框架 二. 配置调优 1. 全局配置 1.1 关闭版本和修改版本 1.2 修改启动的进程数 1.3 cpu与work进程绑定 1.4 pid路径 1.5 nginx进程的优先级&#xff08;work进程的优先级&#xff09; 1.6 调试work进程打开的文…

浅谈数字信号处理器的本质与作用:从定义、原理到应用场景

数字信号处理器&#xff08;DSP&#xff09;作为一种关键的电子元件&#xff0c;在通信、音频、图像处理等领域扮演着不可或缺的角色。然而&#xff0c;对于许多人来说&#xff0c;数字信号处理器的概念可能依然模糊&#xff0c;其作用和原理也许并不为人所熟知。因此&#xff…

单调栈总结以及Leetcode案例解读与复盘

单调栈总结以及Leetcode案例解读与复盘 一、单调栈是什么&#xff1f; 单调栈&#xff08;monotonous stack&#xff09;是指栈的内部从栈底到栈顶满足单调性的栈结构。 二、如何维护单调性 新元素入栈时&#xff0c;会与栈顶元素进行比较&#xff0c;使得栈始终保持单调性…

性能分析5部曲:瓶颈分析与问题定位,如何快速解决瓶颈?

一、引言 很多做性能测试的同学都问过我这样一个问题&#xff1a;鱼哥(Carl_奕然)&#xff0c;你说性能测试的重点是什么? 我的回答很简单&#xff1a;瓶颈分析与问题定位。 在性能项目的整个周期&#xff0c;不管是脚本设计&#xff0c;脚本编写还是脚本执行&#xff0c;都…

shapely 笔记:基本方法

1 线性方法 1.1 object.interpolate(distance[, normalizedFalse]) print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(1.5)) #POINT (0.5 1)print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(0.75, normalizedTrue)) #POINT (0.5 1) LineString([(0, 0), (0…

【视频编解码】M-JPEG压缩、H.264压缩 对比

简介 参考这篇文章&#xff1a;https://blog.csdn.net/qq_41248872/article/details/83590337 写的比较好&#xff0c;这里就不赘述了。 我们在视频传输的时候&#xff0c;需要压缩&#xff0c;常见的压缩包括: jpeg 压缩h264 压缩 当然使用最多的还是 264, 毕竟他的压缩比…

pikachu靶机-XSS

XSS&#xff1a; XSS&#xff08;跨站脚本&#xff09;概述 Cross-Site Scripting 简称为“CSS”&#xff0c;为避免与前端叠成样式表的缩写"CSS"冲突&#xff0c;故又称XSS。一般XSS可以分为如下几种常见类型&#xff1a; 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS; …

Flutter Slider自定义滑块样式 Slider的label标签框常显示

1、自定义Slider滑块样式 Flutter Slider控件的滑块系统样式是一个圆点&#xff0c;thumbShape默认样式是RoundSliderThumbShape&#xff0c;如果想要使用其它的样式就需要自定义一下thumbShape&#xff1b; 例如需要一个上图样式的&#xff08;圆点半透明圆形边框&#xff09…

美国纽约时代广场纳斯达克大屏投放-大舍传媒

美国纽约时代广场纳斯达克大屏投放-大舍传媒 引言 对于大舍传媒来说&#xff0c;能够在美国纽约时代广场纳斯达克大屏投放广告是一个里程碑式的时刻。这不仅仅代表着大舍传媒在全球范围内的知名度与实力&#xff0c;也标志着该公司在国际市场上取得了巨大的进展。纽约时代广场…