linux中awk,sed, grep使用

《linux私房菜》这本书中将sed和awk一同归为行的修改这一点,虽然对,但不利于实际处理问题时的思考。因为这样的话,当我们实际处理问题时,遇到比如说统计文本打印内容时,我们选择sed还是awk进行处理呢?
也因此

grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

这样的思路更便于我们处理问题时的思路。
比如我们的变量应用文本,需要根据环境进行编辑时,这时候使用sed来编辑脚本便是我们第一时间能想到的了。

awk

awk命令正如上面所说,可以格式化文本
体现就在于它的分隔符上,默认是空格。
修改方式有两种

awk -F":" aa.txt
awk '{FS=":"}' aa.txt

第二种会导致第一行不适用,需要在BEGIN中编写,因此直接用第一种。

awk根据分隔符可以将行内容分为多段,每段按照从左到右的顺序,用$1,$2, $3…来输出。$0输出整行。

基础使用可以输出指定列

比如说这个问题
在这里插入图片描述
计算内存和。

a=0
b=$(cat nowcoder.txt|sed '1d'|awk -F" " '{print $4}')
echo $b
for i in $bdoa=$(echo "$a+$i"|bc)done
echo $a

此外awk的内容是可以包含三部分的,除了必须的逐行处理的内容,还可以包含BEGIN和END的内容。BEGIN表示逐行处理前,END表示逐行处理结束后。

也即如下

awk 'BEGIN{FS=":"} {print $3} END{print "aaa"}' aaa.txt  

aaa.txt如下

a:b:c

输出如下
在这里插入图片描述
END可以获取到在逐行处理中的变量,下面有示例可以看到。

awk功能光如此也不足道,强的地方还在于它的逻辑处理。
我们可以在文本内部写java语法的循环判断,而不用遵守shell的循环判断语法格式

如下面这个问题,
在这里插入图片描述

awk '{num[$2] += 1} END{for(a in num) if(num[a] >= 2) print num[a] a}' nowcoder.txt|sort -n 
#除了内部循环以外也使用了一维数组。shell中变量在赋值时就会完成初始化,这种东西见仁见智吧,我不觉得有啥好用的。

shell的变量没有定义都是字符串,自然数组的指针也能是字符串。

可以看到,awk确实可以进行相对复杂的格式化处理。

又因为shell中数组指针是字符串,我们可以用此来定义多维数组,如何理解?也就是说我们可以定义一个类似于这样的数组

num[1,2]=xxxxx
num[1,3]=yyyyy

其中的"1,2"就是这个指针的字符串。
当我们想取时可以用循环遍历来取。
上面说的这些都是在awk块内部建立的,其余地方使用会报错的

你可能会想行数和列数怎么确定呢,事实上不存在给你一个已生成的数组,数组的初始化一般都是你自己建立的。所以行数和列数你是已知的。实在不知道,那就只能for a in 数组来遍历打印看看了。

如下面这个问题用到了二维数组

在这里插入图片描述
使用二维数组编写如下

awk '{for(i=1;i<=NF;i++){num[NR,i]=$i}} END{for(j=1;j<=(i-1);j++) {for(k=1;k<=NR;k++){printf num[k,j]"\t"}printf "\n"
}}' nowcoder.txt

END代码块中,NR最后保存为行数, i-1为列数。

awk使用能熟练到这个程度就差不多够了。

sed

grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

还是这个思路,那么当我们遇到单纯编辑文本时,就可以直接考虑用sed

sed命令还是很强大的,
在我工作过程中,关于nginx配置文件的编辑,环境变量配置文件根据环境进行的修改来写脚本文件时,都会用到这个命令。

sed简单使用时,可以在指定的行下添加新行,删除该行,根据正则替换行内匹配到的内容。

如下面这个问题。
在这里插入图片描述

sed '/^.*[bB].*$/d' nowcoder.txt

sed使用并不复杂,因此用来处理的问题也不算复杂,但是该用的时候还是很好用的。
上面是匹配到对应行就删除该行,格式为

sed '/正则/d' 文件名

另一个比较常用的是替换
格式为

sed 's/正则/替换的内容/g' 文件名

没找到相关例题,但是我们可以举个实际场景,某个应用的开放端口发生了改动(比如说增加了ssl访问端口)或者访问上下文发生了改动,此时线上环境还是用的旧的端口号,旧的上下文,那么我们更新版本的时候就需要脚本去改变我们nginx转发时候访问的端口号。那么改动端口号的时候我们就会用到sed。

sed -i 's/localhost:8080/localhost:8081/g' nginx.conf  #-i表示不输出到界面直接修改源文件

界定符也不一定是‘/’,也可以是’@‘,’#'.可以用来解决替换内容内部含有‘/’的情况。

grep

grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

因此按这个思路,grep应该是运维最常用到的命令了,无论是检查当前服务器是否开启某个端口,还是搜索报错日志具体ERROR信息时这些十分常见的场景都是会用到的。

比如在应用日志中搜索error级别的日志信息

cat 日志文件 |grep -i error #-i参数不区分大小写

如果更具体需要用到正则,,比如搜索以ERROR开头日志则只需如此使用

cat 日志文件 |grep -i '^error'

除了-i之外常用的参数有

-v 显示不含有该搜索字段的行
-c 代替显示行信息,显示含有该搜索信息的行数
-n 显示行号

grep简单实用,也因此常用到。

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

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

相关文章

​香橙派AIpro测评:usb鱼眼摄像头的Camera图像获取

一、前言 近期收到了一块受到业界人士关注的开发板"香橙派AIpro",因为这块板子具有极高的性价比&#xff0c;同时还可以兼容ubuntu、安卓等多种操作系统&#xff0c;今天博主便要在一块832g的香橙派AI香橙派AIpro进行YoloV5s算法的部署并使用一个外接的鱼眼USB摄像头…

React 中如何使用 Monaco

Monaco 是微软开源的一个编辑器&#xff0c;VSCode 也是基于 Monaco 进行开发的。如果在 React 中如何使用 Monaco&#xff0c;本文将介绍如何在 React 中引入 Monaco。 安装 React 依赖 yarn add react-app-rewired --dev yarn add monaco-editor-webpack-plugin --dev yarn…

学习和发展人工智能:新兴趋势和成功秘诀

人工智能(AI)继续吸引组织&#xff0c;因为它似乎无穷无尽地提高生产力和业务成果。在本博客中&#xff0c;了解学习和发展(L&D)部门如何利用人工智能改进流程&#xff0c;简化工作流程&#xff1f; 学习与发展(L&D)部门领导开始探索如何提高和支持人工智能能力的劳动…

1-认识网络爬虫

1.什么是网络爬虫 ​ 网络爬虫&#xff08;Web Crawler&#xff09;又称网络蜘蛛、网络机器人&#xff0c;它是一种按照一定规则&#xff0c;自动浏览万维网的程序或脚本。通俗地讲&#xff0c;网络爬虫就是一个模拟真人浏览万维网行为的程序&#xff0c;这个程序可以代替真人…

工业智能网关在现代工业生产中的重要性-天拓四方

工业智能网关是一款具备挖掘工业设备数据并接入到自主开发的云平台的智能嵌入式网络设备。它具备数据采集、协议解析、边缘计算&#xff0c;以及4G/5G/WiFi数据传输等功能&#xff0c;并能接入工业云平台。这种网关不仅支持采集PLC、传感器、仪器仪表和各种控制器&#xff0c;还…

iss文件本机可以访问,其他电脑无法访问解决

1.搜索的时候有很多答案&#xff0c;总结就是2种 引用来自这位大佬的博客跳转 2.我实际解决了的方法 将这里的ip地址修改为你局域网wifi的ip 如何看自己wifi的ip&#xff0c;大家自行百度&#xff01;

linux中与网络有关的命令

本文的命令总览 ifconfig命令 在 Linux 系统中&#xff0c;ifconfig 命令用于配置和显示网络接口的信息&#xff0c;包括 IP 地址、MAC 地址、网络状态等。同时我们也可以利用ifconfig 命令设置网络接口对应的ip地址&#xff0c;子网掩码等 当你使用 ifconfig 命令时&#xf…

UE5.4新功能 - Texture Graph上手简介

TextureGraph是UE5.4还在实验(Experimental)阶段的新功能&#xff0c;该功能旨在材质生成方面达到类似Subtance Designer的效果&#xff0c;从而程序化的生成一些纹理。 本文就来简要学习一下。 1.使用UE5.4或以上版本&#xff0c;激活TextureGraph插件 2.内容视图中右键找到…

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活

在如今多元的数字时代&#xff0c;我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说&#xff0c;有时候需要在自己的电脑上安装 Windows 操作系统&#xff0c;以体验更多软件及功能&#xff0c;而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…

docker的安装与基本使用

一.docker的安装卸载 1.先安装所需软件包 yum install -y yum-utils2.设置stable镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3.安装DOCKER CE yum -y install docker-ce docker-ce-cli containerd.io 4.验…

深度Q网络(DQN)算法技术博客

深度Q网络&#xff08;DQN&#xff09;是一种将深度学习与强化学习相结合的算法&#xff0c;用于解决高维状态空间的强化学习问题。本文将详细介绍DQN算法的基本原理&#xff0c;关键公式以及具体的代码实现。 一、DQN算法的基本原理 DQN算法是Q学习的一种扩展&#xff0c;利…

Prompt的万能公式和优化技巧

文章目录 前言一、万能公式二、优化技巧1.设定角色2.设定目标和动机3.引导主观回答4.预设条件5.做强调6.思维链&#xff08;COT&#xff09;7.巧用定界符 前言 随着LLM的发展&#xff0c;能给我们带来很多方便&#xff0c;但是又引出了一个新的问题就是我们该如何使用他们&…

通过9大步骤,帮助企业在数字化转型中搭建数据分析的报表体系!

引言&#xff1a;在数字化转型中&#xff0c;企业搭建数据分析的报表体系是一个系统性的过程&#xff0c;需要综合考虑业务需求、数据来源、技术平台等多个方面。此外从报表生命周期的角度来说&#xff0c;从产生、使用以及最后消亡退出体系&#xff0c;都需要通盘考虑&#xf…

Linux上快速定位Java代码问题行

生产环境中&#xff0c;经常会遇到CPU持续飙高或内存、IO飙高&#xff0c;如何快速定位问题点是很多新手头疼的问题&#xff0c;只能通过经验和代码推理&#xff0c;其实这里针对Java程序可以通过top和jstack命令&#xff0c;快速定位到问题代码。 Top命令的输出 具体定位之前…

虚拟机与主机的联通

本地光纤分配地址给路由器--》连结路由器是连结局域网--》由路由器分配IP地址 因此在网站上搜索的IP与本机的IP是不一样的 1.windows查看主机IP地址 在终端输入 2.linux虚拟机查看ip 3.主机是否联通虚拟机ping加ip

Hadoop页面报错Permission denied: user=dr.who, access....

1、临时解决 hdfs dfs -chmod -R 777 /这种方法&#xff0c;存在一个不足&#xff0c;就是后面重新创建的文件夹&#xff0c;页面进行删除的时候&#xff0c;依然报这个错。 但是&#xff0c;对于应付紧急客户需求&#xff0c;可以临时用一下。 2、永久解决 查看页面的Owner…

为什么使用StartAI文生图进行AI绘画?

什么是文生图&#xff1f; 文生图是AIGC中一种先进的图像生成技术&#xff0c;它能够根据用户输入的文字描述&#xff0c;智能地生成相应的图像。无论是抽象的概念&#xff0c;还是具体的物体&#xff0c;文生图都能够以惊人的准确性和艺术性呈现出来。 StartAI文生图如何进行…

7 动态规划

下面的例子不错&#xff1a; 对于动态规划&#xff0c;能学到不少东西&#xff1b; 你要清楚每一步都在做什么&#xff0c;划分细致就能够拆解清楚&#xff01; xk. - 力扣&#xff08;LeetCode&#xff09; labuladong的算法笔记-动态规划-CSDN博客 动态规划是一种强大的算法…

Rethinking Federated Learning with Domain Shift: A Prototype View

CVPR2023,针对分布式数据来自不同的域时,私有模型在其他域上表现出退化性能(具有域转移)的问题。提出用于域转移下联邦学习的联邦原型学习(FPL)。核心思想是构建集群原型和无偏原型,提供富有成效的领域知识和公平的收敛目标。将样本嵌入拉近到属于相同语义的集群原型,而…

@react-google-maps/api实现谷歌地图嵌入React项目中,并且做到点击地图任意一处,获得它的经纬度

1.第一步要加入项目package.json中或者直接yarn install它都可以 "react-google-maps/api": "^2.19.3",2.加入项目中 import AMapLoader from amap/amap-jsapi-loader;import React, { PureComponent } from react; import { GoogleMap, LoadScript, Mar…