当前位置: 首页 > news >正文

【linux】grep、awk、sed实战练习(1)-template

一、grep常见用法

1.1.从文件中查找关键字符串

# 比如:查找/etc/nginx/nginx.conf文件包含"listen"的行
[root@ecs_server test]# grep "listen" -n  /etc/nginx/nginx.conf
52:	    listen 8088; 
87:     listen 8096;
# 比如:查找/etc/passwd文件包含"root"的行
方法一:直接从文件中查找
[root@ecs_server ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
方法二:通过管道符号传输查找
[root@ecs_server ~]# cat /etc/passwd|grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

1.2.从目录中查找关键字符串

# 比如:查找/home/下包含"李四"或"张三"的文件及行号
[root@ecs_server test]# grep -E "李四|张三" -n -r /home/
/home/test/a1.txt:4:李四
/home/test/b1.txt:10:李四
# 比如:比对/home/下a.xml和b.xml中ContactNumber字段的区别
[root@ecs_server test]# grep "ContactNumber" -n -r /home/
/home/test/b.xml:106:            <ContactNumber></ContactNumber>
/home/test/a.xml:106:            <ContactNumber>56451234</ContactNumber>

1.3.精确查找文件中包含的单词

使用grep中单词的定界符号:(\<...\> 或者 \b...b\),用于选取准确的字符串。

\< 和\b 是以什么开头;\>和b\ 是以什么结尾;\<...\> 或者 \b...b\ 是指查找这个单词

[root@ecs_server test]# cat d定界符.txt
lisi123
lisiabcde
45lisi
alisi
99lisi123
lisi
zhagnsan
# 单词以lisi开头
[root@ecs_server test]# cat d定界符.txt |egrep "\<lisi"
lisi123
lisiabcde
lisi
[root@ecs_server test]# cat d定界符.txt |egrep "\blisi"
lisi123
lisiabcde
lisi
# 单词以lisi结尾
[root@ecs_server test]# cat d定界符.txt |egrep "lisi\>"
45lisi
alisi
lisi
[root@ecs_server test]# cat d定界符.txt |egrep "lisi\b"
45lisi
alisi
lisi
# 单词以lisi开头和结尾
[root@ecs_server test]# cat d定界符.txt |egrep "\<lisi\>"
lisi
[root@ecs_server test]# cat d定界符.txt |egrep "\blisi\b"
lisi
# 比如:根据进程号(pid=442073)查看进程
[root@ecs_server test]# ps aux|egrep "\<442073\>"
root      442073  0.0  0.0  26828   924 ?        Ss   Jan02   0:00 nginx: master process /usr/sbin/nginx
root      488726  0.0  0.0  12144  1204 pts/2    S+   14:42   0:00 grep -E --color=auto \<442073\>

1.4.查看文件(滤除空行和注释行)

去除 #开头的注释行、空格键开头的空行、空行】,并显示行号,正则表达式:"\s*#|^$|^#"

[root@ecs_server-01 test]# cat /etc/login.defs |egrep -v -n "\s*#|^$|^#" 
15:MAIL_DIR	/var/spool/mail
25:UMASK		022
30:HOME_MODE	0700
39:PASS_MAX_DAYS	99999
40:PASS_MIN_DAYS	0
41:PASS_MIN_LEN	5
42:PASS_WARN_AGE	7
47:UID_MIN                  1000
48:UID_MAX                 60000
50:SYS_UID_MIN               201
51:SYS_UID_MAX               999
56:GID_MIN                  1000
57:GID_MAX                 60000
59:SYS_GID_MIN               201
60:SYS_GID_MAX               999
74:CREATE_HOME	yes
78:USERGROUPS_ENAB yes
81:ENCRYPT_METHOD SHA512

1.5.查出文件中包含的特殊字符

# |sort|uniq 排序 去重 查找出包含的特殊字符
[root@ecs_server test]# egrep -o "[^0-Z]" /etc/ssh/sshd_config |sort|uniq  	 
!
"
#
'
(
)
,
-
.# 列出包含特殊字符的所在行
[root@ecs_server test]# cat /etc/ssh/sshd_config |egrep -n -o "[^0-Z]"
1:#
1:	
1:$
1::
1: 
1:_
1:,
1: 
1:.

二、awk常见用法

awk是一种文本处理工具,它可以从文件或标准输入中逐行读取文本,并对每行文本进行指定操作。

两种语法格式

1.awk [选项] 命令 文本   #命令可分为三段 == ‘ BEGIN{print 1/2}’ {print”ok”} END{print”-----”}’

2.awk [选项] -f 脚本 文本

2.1.awk截取文件内容

比如:awk截取passwd文件的用户名以及密码
[root@ecs_server test]# awk -F ":" '{print $1,$2}' /etc/passwd|head -n 10
root x
bin x
daemon x
adm x
lp x
sync x
shutdown x
halt x
mail x
operator x

 2.2.awk命令的操作命令(BEGIN、END、NF、NR)

$1~/root/  :表示在第一个字段里面包含“root” 
$3>1005 :UID大于1005的
BEGIN  :只在文件开头运行一次 
END :只在文件结尾运行一次 
NF :一行里有多少个字段(列) 
NR : 行号 
$NF :最后一个字段 
length($1) :表达 $1 字段的长度 

[root@ecs_server-01 test]# awk -F ":" 'BEGIN{num=0;print "开始处 理文件/etc/passwd"} $1~/root/ || $3>1005 {print NR,NF,$1,length($1),$NF,$(NF-1),$3;num++} END{print "total:" num}' /etc/passwd 
开始处 理文件/etc/passwd
1 7 root 4 /bin/bash /root 0
13 7 nobody 6 /sbin/nologin / 65534
total:2

2.3 awk的for循环

user[$1]=$3 :赋值操作,user类似是一个字典key=$1,value=$3,{tss:59,clevis:997,……}
login[$1]=$7 :赋值操作,{root:/bin/bash,bin:/sbin/nologin,……}

[root@ecs_server test]# cat /etc/passwd|awk -F ":" '{user[$1]=$3;print $1,user[$1]}'|head
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
[root@ecs_server test]# cat /etc/passwd|awk -F ":" '{login[$1]=$7;print $1,login[$1]}'|head
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
[root@ecs_server test]# cat /etc/passwd|awk -F ":" '{user[$1]=$3}END{for(i in user) print i,user[i]}'|head
tcpdump 72
sshd 74
setroubleshoot 991
systemd-resolve 193
shutdown 6
bin 1
redis 987
chrony 990
tss 59
mail 8

 三、sed常见用法

 sed命令是一种流编辑器,用于对文本进行处理和转换。它可以读取文本文件并对其进行编辑、替换、删除、插入等操作,可以实现批量修改文件内容的功能。 sed是一种支持正则表达式的非交互式流编辑器(stream editor),是脚本中修改文本或者文本替换的最佳工具。

 可参考:

sed命令详解 - edwardlost - 博客园
 


如有问题之处,请多多指教。

相关文章:

【linux】grep、awk、sed实战练习(1)-template

一、grep常见用法 1.1.从文件中查找关键字符串 # 比如&#xff1a;查找/etc/nginx/nginx.conf文件包含"listen"的行 [rootecs_server test]# grep "listen" -n /etc/nginx/nginx.conf 52: listen 8088; 87: listen 8096; # 比如&#xff1a;查…...

UDP报文格式

UDP是传输层的一个重要协议&#xff0c;他的特性有面向数据报、无连接、不可靠传输、全双工。 下面是UDP报文格式&#xff1a; 1&#xff0c;报头 UDP的报头长度位8个字节&#xff0c;包含源端口、目的端口、长度和校验和&#xff0c;其中每个属性均为两个字节。报头格式为二…...

联想Android面试题及参考答案

请介绍一下 Android 的架构,并谈谈对 Linux 的了解。 Android 架构主要分为四层,从下往上依次是 Linux 内核层、系统运行库层、应用框架层和应用层。 Linux 内核层是 Android 系统的基础。它提供了底层的硬件驱动程序,包括显示驱动、摄像头驱动、音频驱动等多种硬件设备的驱…...

Android CustomTextField

在 Compose 中开发用户界面时&#xff0c;需要处理输入框和键盘的交互&#xff0c;例如在键盘弹出时调整布局位置&#xff0c;避免遮挡重要内容。本篇博客将通过一个完整的示例展示如何实现这一功能。 功能概述 本例实现了一个简单的输入框。当输入框获得焦点或输入文字时&…...

网络设备安全保证计划 (NESAS) - 供应商视角 笔记

NESAS 对供应商的意义 提升产品安全性: NESAS 为供应商提供了一套全球认可的安全评估标准&#xff0c;帮助其识别和解决产品中的安全漏洞。通过 NESAS 评估&#xff0c;供应商可以证明其产品符合行业最高安全标准&#xff0c;增强客户信任。增强市场竞争力: 通过 NESAS 认证的…...

强化学习-蒙特卡洛方法

强化学习-数学理论 强化学习-基本概念强化学习-贝尔曼公式强化学习-贝尔曼最优公式强化学习-值迭代与策略迭代强化学习-蒙特卡洛方法 文章目录 强化学习-数学理论一、蒙特卡洛方法理论(Monte Carlo, MC)二、MC Basic2.1 算法拆解2.2 MC Basic算法 三、MC Exploring Starts3.1 …...

IIO(Industrial I/O)驱动介绍

文章目录 IIO&#xff08;Industrial I/O&#xff09;驱动是Linux内核中用于工业I/O设备的子系统&#xff0c;主要用于处理传感器数据采集和转换。以下是其关键点&#xff1a; 功能 数据采集&#xff1a;从传感器读取数据。数据处理&#xff1a;对原始数据进行滤波、校准等操作…...

画流程图 代码生成流程图 流程图自动运行

一&#xff1a;在线平台 典藏 drawio&#xff1a;完全免费&#xff1b;可拆入代码生成&#xff1b;使用方法 Kimi drawio生成流程图&#xff1a;Kimi里面生成Mermaid格式——>生成代码并复制——>进入drawio里面点插入"号"——>高级——>Mermaid——…...

Maven 配置本地仓库

步骤 1&#xff1a;修改 Maven 的 settings.xml 文件 找到你的 Maven 配置文件 settings.xml。 Windows: C:\Users\<你的用户名>\.m2\settings.xmlLinux/macOS: ~/.m2/settings.xml 打开 settings.xml 文件&#xff0c;找到 <localRepository> 标签。如果没有该标…...

计算机网络常见协议

目录 OSPF(Open Shortest Path First) NAT(Network Address Translation) ICMP (Internet Control Message Protocol) HTTPS&#xff08;SSL/TLS加密&#xff09; HTTPS协议 1. 对称加密 2. 非对称加密 3. 证书验证 4. 回顾https协议传输流程 HTTP TCP UDP 1. TCP&a…...

SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab实现

SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab实现 目录 SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab实现分类效果基本描述程序设计参考资料 分类效果 基本描述 SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长…...

基于Java+SpringBoot+Vue的前后端分离的体质测试数据分析及可视化设计

基于JavaSpringBootVue的前后端分离的体质测试数据分析及可视化设计 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码…...

Ansible实战:如何正确选择 command 和shell模块?

在使用Ansible进行自动化运维时&#xff0c;command 和 shell 模块是我们执行命令的好帮手。虽然它们看起来很相似&#xff0c;但在功能特性和适用场景上其实有着明显的不同。正确选择合适的模块不仅能够提高任务的效率&#xff0c;还能帮助我们规避一些潜在的风险。在这篇文章…...

机器学习:监督学习与非监督学习

监督学习是利用带有标签的数据进行训练,模型通过学习输入和输出之间的关系来进行预测。也就是说,数据集中既有输入特征,也有对应的输出标签,模型的目标是找到从输入到输出的映射关系。 而无监督学习则使用没有标签的数据进行训练,模型的任务是发现数据中的内在结构或模式…...

近红外简单ROI分析matlab(NIRS_SPM)

本次笔记主要想验证上篇近红外分析是否正确&#xff0c;因为叠加平均有不同的计算方法&#xff0c;一种是直接将每个通道的5分钟实时长单独进行叠加平均&#xff0c;另一种是将通道划分为1分钟的片段&#xff0c;将感兴趣的通道数据进行对应叠加平均&#xff0c;得到一个总平均…...

运输层安全协议SSL

安全套接字层 SSL (Secure Socket Layer) SSL 作用在端系统应用层的 HTTP 和运输层之间&#xff0c;在 TCP 之上建立起一个安全通道&#xff0c;为通过 TCP 传输的应用层数据提供安全保障。 应用层使用 SSL 最多的就是 HTTP&#xff0c;但 SSL 并非仅用于 HTTP&#xff0c;而是…...

“扣子”开发之四:与千帆AppBuilder比较

上一个专题——“扣子”开发——未能落地&#xff0c;开始抱着极大的热情进入&#xff0c;但迅速被稚嫩的架构模型折磨打击&#xff0c;硬着头皮坚持了两周&#xff0c;终究还是感觉不实用不趁手放弃了。今天询问了下豆包&#xff0c;看看还有哪些比较好的AI开发平台&#xff0…...

Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的…...

62_Redis服务器集群优化

Redis集群虽然具备高可用特性,且能实现自动故障恢复,但是如果使用不当,也会存在一些问题,总结如下。 集群完整性问题集群带宽问题数据倾斜问题客户端性能问题命令的集群兼容性问题Lua和事务问题1.集群完整性问题 在 Redis 集群的默认配置下,当节点检测到存在至少一个哈希…...

【React】静态组件动态组件

目录 静态组件动态组件创建一个构造函数(类)使用 class 实现组件**使用 function 实现类组件** 静态组件 函数组件是静态组件&#xff1a; 组件第一次渲染完毕后&#xff0c;无法基于内部的某些操作让组件更新「无法实现自更新」&#xff1b;但是&#xff0c;如果调用它的父组…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...