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

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

时间:2024-09-28 21:52:22浏览次数:3  
标签:文件 grep string filename sed awk Linux 三剑客

  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或者开发就足够了。

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

标签:文件,grep,string,filename,sed,awk,Linux,三剑客
From: https://blog.csdn.net/qq_45732829/article/details/142604460

相关文章

  • 在新ARM板上移植U-Boot和Linux指南
    序言从支持一个定制板子在U-Boot和Linux中的过程中得到经验以一个带有知名SoC(i.MX6)且IP已经得到支持的板子为例,这次讨论几乎不涉及编码技能,更多地聚焦在U-Boot部分一般原则如果您有您的BSP(板级支持包)的源代码,请编译并运行BSP以:验证您正在工作的IP(知识产权/硬件模块)能......
  • Linux-基础实操篇-组管理和权限管理(下)
    chown    改变用户者    chown新用户路径文件名chgrp     改变用户组和目录组    chgrp新组名路径文件名chmod    改变用户和目录权限    chmod-R[r=4,w=2,x=1,777]路径文件名权限的基本介绍0-9位说明第......
  • Linux系统性能调优技巧+命令
    引言        在现代IT环境中,Linux系统的性能直接影响到应用程序的效率和用户体验。本文将从多个角度探讨如何优化Linux系统性能,提升整体工作效率。1.CPU优化         CPU是系统的核心,影响到所有进程的执行速度。优化CPU使用可以提高应用程序的响应速度和......
  • linux:查看网卡的发送接收数据量统计
    一,使用ip命令:命令: ip-slink-s[tatistics]  :统计[root@webmysql]#ip-slink1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNmodeDEFAULTgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:00:00:00:00:00RX:......
  • Linux便捷查询使用手册 第七章:软件包管理
    目录7.1软件包管理的基本概念7.1.1什么是软件包?7.1.2包管理器的类型7.2常用命令7.2.1Debian/Ubuntu系列1.apt命令2.dpkg命令7.2.2RedHat/CentOS系列1.yum命令2.dnf命令7.2.3通用命令1.rpm命令(适用于RedHat系列)7.3软件源管理7.3.1软件源的概念7.......
  • systemd-analyze命令:Linux系统启动分析
    一、命令简介用途:systemd-analyze​命令用于分析系统引导过程的时间性能。标签:系统管理,性能分析。相关命令:systemd-bootchart​,systemd-cgtop​,systemd-resolve​.‍二、命令参数命令格式systemd-analyze[OPTIONS...]COMMAND...选项和参数systemd-ana......
  • Linux系统更换镜像源的方法 触觉智能Purple Pi R1双网口开发板演示
    本文适用于触觉智能的SigmaStar、瑞芯微、全志等所有芯片方案产品,搭载Linux系统(Ubuntu/Debian/Buildroot)均可。本次使用到的是触觉智能的PurplePiR1双网口开发板,搭载了SigmaStarSSD201/SSD202D芯片,类树莓派设计,双核A7,带WiFi功能,是嵌入式新人入门学习的高性价比开发板!什么......
  • Linux环境下git仓库的搭建
    (1).参考文献官网在线教程:https://git-scm.com/book/zh/v2官方网站:https://git-scm.com/(2).实验环境2核2GCentOS7.6.1810(3).安装git1)yum或dnf安装[root@VM-0-17-centos~]#dnf-yinstallgit-all2)源码安装安装依赖包[root@VM-0-17-centos~]#dnf......
  • 项目实战:Qt+OSG爆破动力学仿真三维引擎测试工具v1.1.0(加载.K模型,子弹轨迹模拟动画,支持
    若该文为原创文章,转载请注明出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142454993长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…Qt开发专栏:项目实战......
  • Linux线程-POSIX信号量与锁以及条件变量
    POSIX信号量POSIX没有元素这个概念相比于SYSTEM-V更简洁,POSIX不一定适用老版本;二者都是系统范畴,都需要手动删除,POSIX相关函数属于线程库,所有编译时需要末尾加上-lpthread选项POSIXPOSIX有名信号量主要用于进程间通信创建成功后,器特殊文件存放路径:/dev/shm/POSIX无名......