《Linux从小白到高手》理论篇(三):vi/vim编辑器和Linux文件处理“三剑客”(sed/grep/awk)

news2024/9/28 9:38:30
  1. List item

本篇介绍vi/vim编辑器和Linux文件处理“三剑客”(sed/grep/awk),这5个工具命令可能是Linux最最常用的,而且功能超级强大。

vi/vim

vi和vim的基本介绍

所有的 Linux 系统都会内建 vi 文本编辑器。Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

vi和vim常用的三种模式

正常模式:
以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、贴上』来处理你的文件数据。
插入模式:
按下i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式, 一般来说按i即可.
命令行模式:
在这个模式当中, 可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的!
在这里插入图片描述

Linux文件处理“三剑客”(sed/grep/awk)

sed的用法

sed(Stream Editor)是一个流编辑器,在 Linux 和 Unix 系统中被广泛用于文本处理。
1、基本替换
替换文件中的特定字符串:

sed 's/old_string/new_string/' filename

这将在文件中把第一次出现的 “old_string” 替换为 “new_string”。例如,sed ‘s/apple/orange/’ fruits.txt会在fruits.txt文件中将 “apple” 替换为 “orange”。
全局替换:

sed 's/old_string/new_string/g' filename

“g” 表示全局替换,即文件中所有的 “old_string” 都将被替换为 “new_string”。
2、行号定位
只处理特定行:

 sed -n '3p' filename

这将只打印文件的第三行。
处理一定范围的行:

sed -n '2,5p' filename

打印文件的第 2 行到第 5 行。
3、删除行
删除特定行:

 sed '3d' filename

删除文件的第三行。
删除符合特定条件的行:

 sed '/pattern/d' filename

删除包含 “pattern” 的行。
4、插入和追加
在特定行前插入文本:

 sed '3i\Inserted text' filename

在文件的第三行前插入 “Inserted text”。
在特定行后追加文本:

 sed '3a\Appended text' filename

在文件的第三行后追加 “Appended text”。
5、使用正则表达式
基于正则表达式进行替换:

 sed 's/[0-9]\+/replacement/' filename

这将把文件中的所有数字替换为 “replacement”。
删除符合正则表达式的行:

  sed '/^[A-Z].*$/d' filename

删除以大写字母开头的行。
6、从文件读取命令
可以将sed命令存储在一个文件中,然后使用-f选项执行这些命令:
创建一个包含sed命令的文件,例如commands.sed:
s/old/new/g
/pattern/d
执行命令文件:
sed -f commands.sed filename
7、直接在命令行中传递多个命令
可以在单个命令中使用分号分隔多个sed命令:
sed ‘s/first/1st/; s/second/2nd/’ filename
这将先把文件中的 “first” 替换为 “1st”,然后把 “second” 替换为 “2nd”。
sed是一个非常强大的工具,通过不同的选项和命令组合,可以实现各种复杂的文本处理任务。在使用时,要注意正则表达式的正确使用以及命令的顺序和效果。sed的功能远不止以上所列的,但掌握以上的用法,作为DBA或者开发就足够了。

grep的用法

grep是一个强大的文本搜索工具。
1、基本搜索
在文件中搜索特定字符串:

grep "search_string" filename

例如,grep “hello” file.txt会在file.txt文件中搜索包含 “hello” 的行。
搜索多个文件:

 grep "search_string" file1.txt file2.txt file3.txt

这将在多个文件中搜索指定的字符串。
二、选项用法
-i:忽略大小写进行搜索。

grep -i "Hello" file.txt

这将在文件中搜索 “Hello”、“hello”、“HELLO” 等各种大小写组合。
-v:反转搜索结果,显示不包含搜索字符串的行。

grep -v "search_string" filename

-n:显示匹配行的行号。

 grep -n "hello" file.txt

-c:只显示匹配的行数,而不是匹配的行内容。

 grep -c "search_string" filename

-l:只列出包含匹配字符串的文件名,而不是显示具体的行内容。

 grep -l "search_string" *

这将在当前目录下的所有文件中搜索,并列出包含指定字符串的文件名。
-r或–recursive:递归地在目录及其子目录下的所有文件中进行搜索。

 grep -r "search_string" directory/

3、正则表达式搜索
grep支持基本的正则表达式搜索。例如:
.表示任意一个字符:

  grep "h..o" file.txt

这将搜索包含 “h 任意两个字符 o” 的行,如 “hello”、“hero” 等。
*表示零个或多个前面的字符:

grep "he*llo" file.txt

可以匹配 “hello”、“heello”、“heeello” 等。
^表示行的开头:

grep “^hello” file.txt

只匹配以 “hello” 开头的行。
$表示行的结尾:

 grep "world$" file.txt

只匹配以 “world” 结尾的行。
4、结合其他命令使用
与管道结合使用:

 cat file.txt | grep "search_string"

先使用cat命令显示文件内容,然后通过管道将输出传递给grep进行搜索。
与其他命令的输出进行搜索:

ps aux | grep "process_name"

这将列出正在运行的进程中包含特定进程名称的行。

awk的用法

awk是一种强大的文本处理工具。
1、基本语法
awk ‘{action}’ input-file
其中,action是要执行的操作,input-file是输入文件。
例如,打印文件中每一行的内容:
awk ‘{print}’ filename
2、打印特定字段
假设一个文件中有以逗号分隔的字段,可以使用$符号加上字段编号来打印特定字段。
例如,打印文件中每行的第二个字段:
awk ‘{print $2}’ filename
3、使用变量
可以在awk中定义和使用变量。
例如,计算文件中某一列的总和:
awk ‘{sum+=$1} END{print sum}’ filename
这里,$1表示每行的第一个字段,sum是定义的变量,在END块中打印总和。
4、条件判断
可以使用条件语句来筛选和处理特定的行。
例如,打印文件中第一个字段大于 10 的行:
awk ‘$1>10 {print}’ filename
5、内置函数
awk提供了一些内置函数,如length()用于计算字符串长度,sqrt()用于计算平方根等。
例如,打印文件中每行第一个字段的平方根:
awk ‘{print sqrt($1)}’ filename
6、格式化输出
可以使用printf语句进行格式化输出。
例如,以特定格式打印每行的两个字段:
awk ‘{printf “Field1: %d, Field2: %s\n”, $1, $2}’ filename
7、处理多个文件
可以同时处理多个文件。
例如,打印两个文件中每行第一个字段的总和:
awk ‘{sum+=$1} END{print sum}’ file1 file2
8、模式匹配
可以使用模式来匹配特定的行进行处理。
例如,打印文件中包含特定字符串的行:
awk ‘/pattern/ {print}’ filename
9、数组的使用
可以在awk中使用数组来存储和处理数据。
例如,统计文件中每个单词出现的次数:

awk '{for(i=1;i<=NF;i++){words[$i]++}} END{for(word in words){print word, words[word]}}' filename

这里,NF表示当前行的字段数量,words是一个数组,用于存储单词及其出现次数。

sed/grep/awk的功能远不止以上所列的,但掌握以上的用法,作为DBA或者开发就足够了。

本篇结束。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者。

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

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

相关文章

【frp】frp重启、frp启动、frp后台启动、frps dashboard等等

我写的关于frp配置的文章&#xff1a;frp配置 服务端frps 1. 创建服务文件 sudo nano /etc/systemd/system/frps.service2. 添加服务配置 在打开的文件中添加以下内容&#xff1a; [Unit] DescriptionFRPS Server Afternetwork.target[Service] Typesimple ExecStart/root…

LeetCode[简单] 136. 只出现一次的数字

给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 思路 当 A 与 B 不同时&#xff0c;按…

代理模式简介:静态代理VS与动态代理

代理模式&#xff1a;静态代理VS动态代理 1、定义2、分类2.1 静态代理2.2 动态代理 3、使用场景4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、定义 代理模式是一种设计模式&#xff0c;通过代理对象控制对目标对象的访问。简而…

Stable Diffusion 使用详解(13)--- 3D纹理增强

目录 背景 Normal Map 描述 原理 使用心得 例子 描述 原图 参数设置 底模 ​编辑 正负相关性提示词 其他参数 controlnet 效果 还能做点啥 调整 效果 背景 实际上&#xff0c;在stable diffusion 中&#xff0c;你获取发现很多controlnet 其实功能有点类似&…

【优化】Vite手动分包

前言 每次打包完成后&#xff0c;默认情况下会将第三方库和自己的代码统统打包到一个JS文件中 打包后的 JS 对应一个指纹&#xff0c;当修改了自己的业务代码并重新打包后&#xff0c;还会将第三方库重新打包&#xff0c;继而生成一个新指纹&#xff0c;浏览器发现指纹变了&am…

从4道入门题目里面看Java和C的差别

目录 1.如何在IDEA进行循环输入 1.1题目概述 1.2循环输入 1.3println和print 2.如何调用数学函数 3.如何生成随机数字 4.字符串比较的方法 4.1错误案例分析 4.3正确比较方法 1.如何在IDEA进行循环输入 1.1题目概述 这个也是牛客上面的一个题目引发的思考&#xff1a;…

MySQl查询分析工具 EXPLAIN ANALYZE

文章目录 EXPLAIN ANALYZE是什么Iterator 输出内容解读EXPLAIN ANALYZE和EXPLAIN FORMATTREE的区别单个 Iterator 内容解读 案例分析案例1 文件排序案例2 简单的JOIN查询 参考资料&#xff1a;https://hackmysql.com/book-2/ EXPLAIN ANALYZE是什么 EXPLAIN ANALYZE是MySQL8.…

Linux进程的学习(持续更新)

冯诺依曼体系结构 概念&#xff1a; 冯・诺依曼体系结构是一种计算机体系结构&#xff0c;由美籍匈牙利科学家约翰・冯・诺依曼提出。它奠定了现代计算机的基本结构。 计算机分为以上五大部件组成&#xff1a; 输入设备&#xff1a;键盘&#xff0c;鼠标&#xff0c;网卡&…

【前端框架对比和选择】React 与 Vue 框架设计思路对比

框架总览 前端框架繁多&#xff0c;在学习的时候也会陷入困惑&#xff0c;我们应该抓住最主流的内容 Vue/React&#xff0c;深入底层&#xff0c;尝试揣摩框架作者的设计思路&#xff0c;开阔前端培训自己的视野&#xff0c;大家也不要把自己限制在框架之中&#xff0c;认为工…

Python | Leetcode Python题解之第442题数组中重复的数据

题目&#xff1a; 题解&#xff1a; class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:ans []for x in nums:x abs(x)if nums[x - 1] > 0:nums[x - 1] -nums[x - 1]else:ans.append(x)return ans

气膜健身馆:提升运动体验与健康的理想选择—轻空间

近年来&#xff0c;气膜健身馆作为一种新兴的运动场所&#xff0c;正逐渐受到越来越多健身爱好者的青睐。这种独特的建筑形式不仅提供了良好的运动环境&#xff0c;更在健康和运动表现上展现出诸多优势。 优越的空气质量 气膜结构的核心技术通过内外气压差形成稳定的气膜&#…

Mysql调优之索引优化(四)

一、mysql索引结构B树原理 B树开始就是n树&#xff0c;不是二叉树 B树的非叶子结点存储了数据&#xff0c;导致层级会很深&#xff0c;每一层又有数据又有索引。 B树只有叶子结点存储数据&#xff0c;其余都是存储索引&#xff0c;增加了每层存取索引的数量&#xff08;3层结构…

Linux开源网络:高性能数据平面

数据平面的性能在很大程度上取决于网络 I/O 的性能&#xff0c;而网络数据包从网卡到用户空间的应用程序需要经历多个阶段&#xff0c;本文从数据平面基础到NFV&#xff0c;NFC基础设施再到OVS-DPDK VPP进行概论上的描述。 部分内容来源于《Linux开源网络全栈详解&#xff1a;从…

助力商用车远程检测维修,贝锐向日葵携手上海星融打造标杆案例

商用车是一个成熟且复杂的领域&#xff0c;伴随着数字化与信息化的不断发展&#xff0c;商用车领域的上下游厂商也正在积极的拥抱数字化&#xff0c;应用信息化工具所带来的“红利”&#xff0c;来提供更高质量的产品与服务&#xff0c;其中比较典型的代表&#xff0c;就是在商…

②EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器

EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器https://item.taobao.com/item.htm?ftt&id798036415719 EtherCAT 串口网关 EtherCAT 转 RS485 &#xff08;接上一章&#xff09; 自由协议通信步骤 &#xff08;以MS-A2-1041为例&#xff09; 接收与…

OSM转出shp的数据为啥有那么多空属性

当打开我们提供的OSM转出SHP格式的电力或其它类型数据可能会看到很多空属性&#xff0c;这个原因其实如果是写程序的人会很容易理解&#xff0c;但一般人可能理解起来比较困难。我试着解释一下&#xff0c;能理解就理解。不能理解您就记住这是格式转换产生的冗余数据就行&#…

【保姆级教程】批量下载Pexels视频Python脚本(以HumanVid数据集为例)

目录 方案一&#xff1a;转换链接为download模式 方案二&#xff1a;获取源链接后下载 附录&#xff1a;HumanVid链接 方案一&#xff1a;转换链接为download模式 将下载链接的后缀加入 /download 然后用下面的脚本下载&#xff1a; import argparse import json import o…

react 状态管理

Redux Redux是React中常用的状态管理组件&#xff0c;类似于Vue中的Pinia(Vuex)&#xff0c;可以独立于框架运行 作用&#xff1a; 通过集中管理的方式管理应用的状态 配套工具 在react中使用redux&#xff0c;官方要求按照两个插件&#xff0c;Redux Toolkit 和 react-red…

【补充】倒易点阵基本性质

&#xff08;1&#xff09;任意倒易矢量 r h k l ∗ h a ∗ k b ∗ l c ∗ \mathbf{r}_{hkl}^* h\mathbf{a^*} k\mathbf{b^*} l\mathbf{c^*} rhkl∗​ha∗kb∗lc∗必然垂直于正空间中的(hkl)晶面。 正空间中的(hkl)晶面的法向是[hkl]&#xff0c;和坐标轴的交点为A、B、…

基于yolov8的辣椒缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

阅读本文请注意该系统设计是针对单个辣椒进行缺陷检测&#xff0c;具体可以在训练数据集查看数据集具体情况 【算法介绍】 基于YOLOv8的辣椒缺陷检测系统是一种利用深度学习技术&#xff0c;特别是YOLOv8算法&#xff0c;来自动识别和检测辣椒表面缺陷的先进系统。YOLOv8作为…