Linux三剑客

news2024/11/28 2:53:33

前言

关于bash
bash:命令处理器,运行在文本窗口,能够执行用户输入的命令。
脚本:从linux文件中读取命令,被称为脚本。

1 命令:alias:起别名
2 快捷键操作:
ctrl+a:光标最左
ctrl+e:光标最右
ctrl+k:光标后面全删
ctrl+l:clear清屏
tap:命令补全
3. 特别的:
linux文件的文档每一行末尾都有 符,空白行也一样利用 c a t − E n p w d . t x t 发现所有内容末尾都有 符,空白行也一样 利用cat -En pwd.txt发现所有内容末尾都有 符,空白行也一样利用catEnpwd.txt发现所有内容末尾都有

关于正则表达式
基本正则表达式:BRE:regular expression
扩展正则表达式:ERE:extend regular expression
Linux三剑客的用途
grep:linux文本查找,一般不改变原文件
sed:linux文本替换,加-i可以改变原文件
awk:linux文本格式化后显示,一般不改变原文件,像Excel格式
以上三者,都是按行操作,一行行去操作

关于正则表达式和扩展正则表达式

普通正则表达式:
在这里插入图片描述
在这里插入图片描述
扩展正则表达式:
grep和sed使用需加: -E
在这里插入图片描述
+:匹配前一个1次或多次
a{n, m}:注意是花括号{},重复前面的a至少n次,最多m次。
[abc]:匹配abc中任意字符1次,带上+,就是匹配前面1次或多次。

grep

选项:
在这里插入图片描述
-v:取反,是比较常用的操作
grep [选项] [模式]
grep 单引号和双引号:一般用单引号,有变量用双引号

grep入门练习

·练手材料

cat /etc/password > pwd.txt
  1. 查找root行,忽略大小写
    -i:忽略大小写
    可以利用grep --help查看各种选项
grep root -i pwd.txt
  1. 统计有多少root有关的行,显示行号
    -c:统计
    可以利用grep --help查看各种选项
grep root pwd.txt -c -n
  1. 统计空行以外所有行和号
    匹配空行用^$,起始和末尾中间是空
    显示行号 -n // 也可以加到-v
    取反 -v
grep '^$' pwd.txt -n -v
  1. 显示非注释行,注释行以#开头
grep '^#' -n  -v pwd.txt
  1. 找所有m开头的,不论大小写
    -n:显示行号
    -i:忽略大小写
grep -i '^m' pwd.txt -n
  1. 输出以.结尾的行
    当要匹配的是正则表达式特殊符号时,加转义反斜杠
    -o 可加可不加,加上把行上其它内容去掉
grep -n '.$' pwd.txt
  1. 匹配有good和glod的行
    ():分组过滤,()内是一个整体,可以被\1引用,且是扩展正则,需要加-E
grep -E '(good|glod)' pwd.txt
  1. 匹配‘lxxe’,且这个词需要出现至少两次,这两次的中间可以有任意内容
    在这里插入图片描述
  2. 寻找带af或NZ或8~9的数字
    在这里插入图片描述
  3. 找到所有大写字母或者带数字的行
    在这里插入图片描述
    如果是[]带^,就是排除

grep练习题

回忆正则表达式和扩展正则表达式

^:表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配。
$:表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配。
^$:表示匹配空行,这里所描述的空行表示"回车",而"空格"或"tab"等都不能算作此处所描述的空行。
^abc$:表示abc独占一行时,会被匹配到。
<或者\b :匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现。
>或者\b :匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现。
\B:匹配非单词边界,与\b正好相反。
特别的扩展正则表达式:加-E
在基本正则表达式中,{n} 表示前面的字符连续出现n次,将会被匹配到。
在扩展正则表达式中,{n} 表示前面的字符连续出现n次,将会被匹配到。
在基本正则表达式中,( ) 表示分组,(ab) 表示将ab当做一个整体去处理。
在扩展正则表达式中,( ) 表示分组,(ab) 表示将ab当做一个整体去处理。

grep使用习惯

  1. grep做题用双引号
  2. >、<,其实像一对<>,显然<是起始,而>是结尾。分隔符不管是空格 还是 : ,grep自动能识别分隔符。
  3. 用扩展正则时,””,可以少写\,用()表示分组。()不用加\
  4. 扩展正则表达式中的>或<,还是得加\
  1. 找出root有关行
    在这里插入图片描述

  2. root开头的行
    开头:用^

grep '^root' pwd.txt
  1. root开头或sync开头
    grep匹配建议都用"",如下括号前不必加反斜杠
    要用到(),使用选项:-E
    在这里插入图片描述

  2. 找出bin开头的行,要行号
    行号 -n
    在这里插入图片描述

  3. 找出非root开头的行
    取反 -v:
    在这里插入图片描述

  4. 统计
    先grep再加管道:| wc -l
    在这里插入图片描述

  5. 最多匹配root3次
    -m选项,直接加3
    在这里插入图片描述

  6. 匹配多个文件,列出存在信息的文件名称
    grep --help:
    -l:匹配到的文件名,
    -L:匹配不到的文件名
    在这里插入图片描述

  7. 显示不以/bin/bash结尾的行
    结尾用$,取反用 -v,下面忘了加 -v
    在这里插入图片描述

  8. 文件中2位数或3位数字的行
    让数字重复2~3次。
    [0-9]{2,3}
    在这里插入图片描述
    第一个绿色错误:因为655,符合数字出现3次,而34符合出现2次,所以看到65534和65534标红,而1000中100匹配到是因为匹配到了三次,而后面的单独0,匹配不到,因为最多3次。
    所以需要增加一个结尾标志符
    这样,数字的后面必须是特殊符号
    在这里插入图片描述

  9. 找出文件中所有大小写i开头的行
    两种写法:
    grep -i:忽略大小写
    在这里插入图片描述
    或者忽略大小写:
    在这里插入图片描述
    或者【】包裹或关系的字符
    在这里插入图片描述

  10. 找出文件中至少一个空白字符开头,后面非空字符的行
    文件中有纯空格的行和空行。
    别匹配到纯空格行
    空格:[[:space:]]
    以空格开头即可
    在这里插入图片描述
    但是我不要纯空格行,怎么去?加上一个去掉纯空格行的命令,管道纯空格取反,其实下面应该写*,而不是以$结尾,但是这样也行的
    在这里插入图片描述
    下面也可以在这里插入图片描述

  11. root,dwj,nobody用户的信息
    ()需要扩展表达式,-E
    空格记得别乱加,这个用老方式,以各行开头,取或即可
    “^(a|b|c)”
    在这里插入图片描述

  12. 找出文件中的函数名,字符串后面跟着括号
    函数必须字母开头:^加字母
    后面是任意数字,但是最后需要是()。在这里插入图片描述如果文本有空格,适合sed查找。

  13. 找出用户名和shell相同的用户?
    分析:什么是和shell相同的用户?
    解释器在最后一列,而用户是开头,所以以:分割,找开头和结尾相同的。

思路:匹配第一个:前面出现出现的词且末尾也要出现一次。
匹配到:结尾而不要:,[^:],意思是不要引号,然后它应该再重复一遍,所以圈起来,中间可以是任意,所以用.*,而要匹配到末尾,出现一次,所以要用\1,一定要加$
使用:“(^[^:]*).*\1$”,
在这里插入图片描述
以上的错误在于后面使用.*,匹配到了全部。
加上>,确定词尾,意思是匹配到前面就停止。
技巧,用\1的部分,最好加上>。

sed

sed的选项:
-i:对原始文本做替换
-n:取消默认输出
-e:多次编辑
-r:支持正则扩展

在这里插入图片描述
sed的内置字符:
在这里插入图片描述
·与grep的相同点:
sed和grep均不考虑分隔符,因为只是做匹配和匹配替换
·与grep的区别:

  1. sed尽量使用单引号’’
  2. sed的扩展正则是-r,-e是多次编辑

sed练习题

1 替换文件的root为dwj,只替换一次
sed的替换,用s杠杠杠///
要显示加上p
仅仅打印用-i

sed 's/root/dwj/p' pwd.txt

只是替换root,而不是开头的
在这里插入图片描述

2 替换文件所有root为dwj,仅打印替换结果
所有的,用g

sed 's/root/dwj/gp' pwd.txt

在这里插入图片描述

3 替换前10行b开头的用户,改为c,仅仅打印替换的结果
前10行,加在s前面,1, 10

sed  '1, 10s/^b/c/p' pwd.txt

在这里插入图片描述

4 替换前10行b开头改为c且m开头改为n
前10行,在’'中加1,10即可
连续做两次,-e即可

sed -e '1,10s/^b/c/' -e '1,10s/^m/n/p' pwd.txt

在这里插入图片描述

5 删除4行后面的行
后5到末尾的行:5,$
删除加:d

sed '5,$d' pwd.txt

在这里插入图片描述

6 删除从root开始到ftp之间的行
既然也是行,就用逗号隔开
删除加d即可

sed '/^root/,/^ftp/d' pwd.txt

在这里插入图片描述

7 删除文件中空白字符开头的行,添加注释符
这个是需要替换,删除还添加,做个替换即可。
匹配开头是空格的空格,并且替换为@\1,此外,-r表示扩展正则表达式
在这里插入图片描述

8 删除文件中空白行和注释行

sed 's/(^$|#)//d' pwd.txt

数据:
在这里插入图片描述
grep ‘^$’得到空行,不是空格行(因为一般没有空格行)

而要找空行就是第8行
操作注释行的删除
数据 lk:
在这里插入图片描述

先删除空白行:
sed ‘/^$/d’ lk
发现空白行消失了,空格行还在
在这里插入图片描述

删除注释行
找某行,都是用杠杠//即可,不用三个杠杠杠
sed ‘/^#/d’ lk
发现#行删除了
在这里插入图片描述
两种合并用-e:
sed -e ‘/^$/d’ -\e ‘/^#/d’ lk
空格行和注释行都被删除了。

9 文件前三行,添加@
其实是替换开头内容为原始多加一个@
所以用\1,(),需扩展表达式 -r

sed -r '1,3s/^(.)/@\1/p' pwd.txt

在这里插入图片描述

10 取出ip地址,两种方式
ifconfig eth0,显示物理网卡内容,加管道,sed 取第二行,2p即可
字符串替换前面的内容为空
多个管道,做替换即可,注意每次都需要-n,取消默认显示内容
在这里插入图片描述
在这里插入图片描述


11 找出系统版本
/etc/centos-release
把这一串中的第一个数字拿到即可
在这里插入图片描述
思路把release之前都替换掉,然后把第一个点后面的的内容都替换掉
在这里插入图片描述
也可以是:
在这里插入图片描述

awk

awk选项参数
在这里插入图片描述
-F需要搭配双引号使用,指定读取的分隔符,允许使用两种分隔符。
在这里插入图片描述
与grep和sed的区别:
awk只用两个//,因为它只做查找并显示成Excel的格式
awk的模式
要对某个列做限定,需要用匹配正则,加飘~
在这里插入图片描述

内置变量
以下都是针对awk的
RS:awk输入换行符修改
ORS:awk输出换行符修改
NR:行号,当前处理的文本行的行号
NF:列号
FNR:各文件分别计数的行号
FILENAME:当前文件名字
ARGC:命令行参数的个数
ARGV:数组,保存命令行给定的各个参数
数字搭配$会显示当前列。
小试身手:
1 $0显示每一行
在这里插入图片描述
2 NF是行号
在这里插入图片描述
3 选定行号输出 NR==2,结果只有一行输出
在这里插入图片描述
4 可以在动作之前加模式,开始或结束输出,也在单引号中
在这里插入图片描述

5 也可以输出参数
在这里插入图片描述

awk练习题

1 在当前系统中打印出所有普通用户的用户和家目录
需要加条件:第3列>=1000,大于等于1000才是普通用户ID,在{}前面加
awk -F":" ‘$3>=1000{print $1, $NF}’ pwd.txt
在这里插入图片描述
2 给txt文件的前5行添加#号
awk添加内容,只是显示上,所以直接读取前5行,多打印输出一个内容即可。
在这里插入图片描述
3 统计文本信息
名 姓 区号 电话 三个月捐款数量
Mike Harrington:[510] 548-1278:250💯175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250💯175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250💯175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250💯17
Chet Main:[510] 548-5258:50:95:135
Tom Savage:[08] 926-3456:250:168:200
Elizabeth Stachelin:[916] 440-1763:175:75:300
因为数据以:、空格切分,所以分隔符用[: ]两种选择
在这里插入图片描述

空格行,要删除,所以加匹配项,要取反。
awk正则匹配,用两个//就行了。此外,去除空行,用!取反即可。
在这里插入图片描述
4 显示Tom电话
tom是名,在第一列,在开头,像上一题匹配空行一样,直接匹配即可
在这里插入图片描述
5 显示Nancy姓名、区号、电话
在这里插入图片描述
6 显示所有D开头的姓
要对某个列做匹配,需要用匹配正则,加飘~
姓在第二列,而要对第二列做正则匹配,就得在
//前面加列和~,后面才是正则表达式
在这里插入图片描述
注意列匹配放在/最前面,且带上飘~。
也是两个//
7 显示所有区号是916的人名
区号916,用[916],但是防止[916]被识别为正则表达式的或选择
在这里插入图片描述
8 显示Mike捐钱信息,每一项加美元符
在这里插入图片描述
9 显示所有人的姓+逗号+名

记得最前面取反,去空行
然后姓、名无非是$2,$1反着写
在这里插入图片描述
10 修改文件内置输出符
-v OFS=”,”
在这里插入图片描述
11 删除文件空白行
也就是个匹配空白,取反操作。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈如何提高自动化测试的稳定性和可维护性

目录 前言&#xff1a; 装饰器与出错重试机制 什么是装饰器&#xff1f; 编写一个出错重试装饰器 pytest 里的出错重试机制实现 Allure 里的测试用例分层 为什么要采用分层机制&#xff1f; allure 的装饰器step 前言&#xff1a; 自动化测试在软件开发中扮演着重要的…

Fortran lapack求数组的特征值,特征向量

call zgeev(V, V, n, arr, lda, w, vl, ldvl, vr, ldvr, work, lwork, rwork, info) 这个函数是求矩阵的特征值&#xff0c;且结果是双精度复数的情况&#xff0c;具体可以查MKL的官方文档。 如果是单精度复数就要用cgeev&#xff0c;其中的参数也是将双精度改为单精度即可。…

Hive,FineBI-30W聊天数据分析及可视化-B站黑马学习记录

2023B站黑马Hadoop、Hive、云平台实战项目 目录 1. 清洗数据 2. 计算各指标&#xff0c;并创建表存储结果 3.FineBI连接Hive数据库&#xff0c;将指标结果可视化 1. 清洗数据 1&#xff09;部分数据缺失地理位置信息&#xff08;sender_gps&#xff09;&#xff0c;需要剔…

Linux下的调试器——gdb使用指南

文章目录 一.序二.安装gdb调试器三.进入调试四.调试相关指令 前言&#xff1b; 在VS环境下&#xff0c;我们不仅可以写代码、编译、运行可执行程序&#xff0c;还可以对生成的可执行程序进行调试。本章我们就来学习如何在Linux环境下进行调试。 一.序 要进行调试&#xff0c;首…

EPICS一个示例数据库实例详解

以下是一个示例数据库图表&#xff1a; 以上记录的数据库文件如下&#xff1a; record(ao, "$(P):SET") {field(FLNK, "$(P):ACTIVATE")field(VAL, "2")field(OUT, "$(P):RUN")field(DRVH, "40")field(DRVL, "5"…

摩尔投票算法(Moore‘s Voting Algorithm)及例题

摩尔投票算法&#xff08;Moores Voting Algorithm&#xff09;及例题 摩尔投票算法简介摩尔投票算法算法思想摩尔投票算法经典题目169. 多数元素229. 多数元素 II6927. 合法分割的最小下标 上午打力扣第 354 场周赛最后十五分钟用摩尔投票算法顺利 AC 第三题&#xff0c;以前没…

ViewRootImpl简析

ViewRootImpl简析 如何实现视图和wms沟通桥梁的作用Session的创建获取画布如何实现事件分发的桥梁作用 The top of a view hierarchy, implementing the needed protocol between View and the WindowManager. This is for the most part an internal implementation detail of…

快速搭建Python(Django)+Vue环境并实现页面登录注册功能

文章目录 一. 创建vue项目及环境搭建1. 创建vue项目2. 配置axios3. 创建vue组件login和register4. 设置并引用路由vue-router5. 完成login&#xff0c;register组件代码6. 完成App.vue的代码 二. 创建django项目及环境搭建1. 创建django项目2.配置mysql数据库3. 创建应用app4.创…

学习babylon.js --- [4] 体验WebVR

本文基于babylonjs来创建一个简单的WebVR工程&#xff0c;来体验一下babylonjs带来的VR效果&#xff0c;由于没有VR头显&#xff0c;所以只能使用Win10自带的混合现实模拟器&#xff0c;开启模拟器请参考这篇文章 一 简单工程 本文基于第三篇文章中的工程进行修改&#xff0c;…

Deep Residual Learning for Image Recognition

2015-ResNet 关键词: residual connection CV论文:一般在第一页就放一个很“好看”的图 从图可以得到的结论:深的网络更难训练 ( 不仅因为过拟合,因为训练时误差都很难降低 ) 网络结构图 1*1卷积作用:改变通道数 ,提出维度匹配方法:1)补零;2)投影projection…

map和set的模拟实现|利用红黑树封装map和set|STL源码剖析

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量干货博客汇总https://blog.csdn.net/yu_cblog/c…

再战Nvidia,安装 Windows 11 和 EndeavourOS 双系统

吐血刚装了一周的Ubuntu23.04就挂了&#xff0c;由于买的是最新的显卡就上了Test版本&#xff0c;结果Ubuntu自带的nvidia驱动535居然会失灵&#xff0c;nvidia-smi直接fail。于是换了一堆发行版本&#xff0c;但是我这个主板没带hdmi不支持集显输出&#xff0c;必须安装时就上…

WEB:warmup

背景知识 文件包含 目录遍历 代码审计 题目 打开链接后只有一张图片 f12和查看源代码都试一下&#xff0c;查看源代码发现如下图 访问一下source.php&#xff0c;有如下代码&#xff0c;进行代码审计 <?phphighlight_file(__FILE__);class emmm{public static function c…

#pragma pack不成对出现造成的异常

#pragma pack需要成对出现&#xff0c;若不成对出现会造成异常&#xff0c;难以调查。 现有5个文件&#xff0c;分别是main.c&#xff0c;A.h&#xff0c;A.c&#xff0c;B.h&#xff0c;B.c。 A.h文件内容如下&#xff1a; #include <stdio.h> #include <stdlib.h&g…

ylb-接口14购买理财产品

总览&#xff1a; 在api模块service包&#xff0c;Invest类下添加&#xff08;投资理财产品&#xff0c; int 是投资的结果 &#xff0c; 1 投资成功&#xff09;&#xff1a; package com.bjpowernode.api.service;import com.bjpowernode.api.pojo.BidInfoProduct;import j…

go mod vendor简明介绍

Go 语言在 go 1.6 版本以后编译 go 代码会优先从 vendor 目录先寻找依赖包&#xff0c;它具有以下优点&#xff1a; 复制依赖&#xff1a;go mod vendor 会把程序所依赖的所有包复制到项目目录下的vendor 文件夹中&#xff0c;所以即使这些依赖包在外部源&#xff08;如 GitHu…

MySQL 约束、聚合查询和联合查询练习

1. 数据库约束 设置一个考勤系统, 包含员工表&#xff0c;考勤记录表 首先要明白, 员工表对考勤记录表是一对多 员工表中起码包含 id , name 考勤记录表则包含 id, 日期, 考勤记录 考勤记录表为子表, id 则为外键约束 员工表为父键, id则为主键约束 搞明白这些, 接下来就…

【C语言】矩阵相乘

#include <stdio.h>#define M 3 #define N 4 #define P 3void fun(int a[M][N], int b[N][P], int m, int p, int n)//定义函数fun {printf("m: %d, p: %d, n: %d\n", m, p, n);int c[M][P]{0};int i, j, k;for(i 0; i < m; i){for(j 0; j < n; j){fo…

【数据结构】朴素模式匹配 KMP算法

&#x1f387;【数据结构】朴素模式匹配 & KMP 算法&#x1f387; &#x1f308; 自在飞花轻似梦,无边丝雨细如愁 &#x1f308; &#x1f31f; 正式开始学习数据结构啦~此专栏作为学习过程中的记录&#x1f31f; 文章目录 &#x1f387;【数据结构】朴素模式匹配 & K…

IDEA中设置鼠标滚轮修改字体大小

IDEA中设置鼠标滚轮修改字体大小&#xff1f; 选择File--Settings--Editor--General&#xff0c;把 Mouse Control 前的对勾勾选 后点击 OK 即可。 勾选此设置后&#xff0c;增加 Ctrl 鼠标滚轮 快捷键来控制代码字体大小显 示。字体随时可以放大缩小~~可真好用呢~