Linux三剑客 grep sed awk 详细使用方法

【Linux 文本处理三剑客:grep、sed、awk 深度解析与实战指南】 本文聚焦 Linux 系统中极具影响力的文本处理工具 grep、sed、awk。详细阐述了 grep 的常用选项与搜索模式,助你精准查找文本;深度解析 sed 作为流编辑器,在文本增删改查及正则处理等方面的强大功能;全面介绍 awk 的模式与操作、内置变量、字段分隔及丰富用法。同时,通过大量实用案例,生动展示各工具的特性,为读者在 Linux 环境下高效处理文本提供清晰且实用的指引 ,无论是日常文件处理还是复杂的文本分析任务,都能从中找到得力的解决方法。 阅读详情

    Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep。

    我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令。

    在说这三个命令前我们要插入一个小插曲就是“正则表达式”。

一、正则表达式

    所谓的正则表达式我个人理解就是正规的表示方法。他是用简单的方法来实现强大的功能,所以深受计算机爱好者的使用。

    三剑客与正则表达式是什么关系呢?

    我们可以这样理解,三剑客就是普通的命令,有的把他们叫做工具,在我看来都一样。而正则表达式就好比一个模版。三剑客能读懂这个模版。就这么简单。注意只有三剑客才能读懂这个模版哦!

    现在他们的关系和功能都搞懂了,接下来我们就来认识下他们怎么结合的。正则表达式是一个模版,这个模版是由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。具体如下

元字符                        功能                                                         意思

^                                 匹配行首                                                  表示以某个字符开头

$                                 匹配行尾                                                  表示以某个字符结尾

^$                               空行的意思                                              表示空行的意思

 .                                 匹配任意单个字符                                   表示任意一个字符

*                                 字符*   匹配0或多个此字符                     表示重复的任意多个字

\                                  屏蔽一个元字符的特殊含义                   表示去掉有意义的元字符的含义

[]                                 匹配中括号内的字符                              表示过滤括号内的字符

.*                                代表任意多个字符                                   就是代表任意多个字符

lele\{n\}                       用来匹配前面lele出现次数。n为次数       就是统计前面lele出现的次数

lele\{n,\}                      含义同上,但次数最少为n                 

lele\{n,m\}                   lele出现次数在n与m之间

三剑客的功能非常强大,但我们只需要掌握他们分别擅长的领域即可:grep擅长查找功能,sed擅长取行和替换。awk擅长取列。

二、grep

1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2.格式
grep [options]
3.主要参数
[options]主要参数:

--color=auto 对匹配到的文本着色显示
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 相当于fgrep,不支持正则表达式

测试:

grep     匹配条件   处理文件

grep root passwd ##贪婪匹配

grep ^root passwd ##以root开头

grep bash$ passwd ##以bash结尾

grep -i root passwd ##忽略大小写

grep -E "root|ROOT" passwd ##后面条件可以是一个正则表达式  
 

cat -b passwd | grep mail ##默认显示mail所在行

cat -b passwd | grep mail -2 ##查看mail及上下两行

cat -b passwd | grep mail -A2 ##查看mail及下两行

cat -b passwd | grep mail -B2 ##查看mail及上两行

'ws'
'w...s'	
'w.....'	
'.....s'

三、sed

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

1.sed命令格式

sed [option]... 'script' inputfile

(1)选项

    -n 不输出模式空间内容到屏幕,即不自动打印
    -e 多点编辑
    -f /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
    -r 支持使用扩展正则表达式
    -i 直接编辑文件
    -i.bak 备份文件并原处编辑

(2)script 地址定界

    不给地址:对全文进行处理
    单地址:
    #: 指定的行,$:最后一行
    /pattern/:被此处模式所能够匹配到的每一行
    地址范围:
    #,#
    #,+#
    /pat1/,/pat2/
    `#,/pat1/
    ~:步进
    1~2 奇数行
    2~2 偶数行

(3)编辑命令:

    d 删除模式空间匹配的行,并立即启用下一轮循环
    p 打印当前模式空间内容,追加到默认输出之后
    a [\]text1 在指定行后面追加文本,支持使用\n实现多行追加
    i [\]text 在行前面插入文本
    c [\]text 替换行为单行或多行文本
    w /path/somefile 保存模式匹配的行至指定文件
    r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后
    = 为模式空间中的行打印行号
    ! 模式空间中匹配行取反处理
    s///:查找替换,支持使用其它分隔符,s@@@,s###
    替换标记:
        g 行内全局替换
        p 显示替换成功的行
        w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中

(1)p模式操作

cat fstab -n | sed 5p			##编辑第五行,并在屏幕中显示
cat fstab -n | sed -n 4p 		##只显示第五行
cat fstab -n | sed -n 3,6p		##显示3-5行内容
cat fstab -n | sed -n '3p;6p' 	##显示第三行和第五行

sed -n '/#/p' fstab		##显示#所在行
sed -n '/#/!p' fstab		##显示不带#的行
sed -n '/\:/p' fstab		##显示含:的行
sed -n '^UUID/p' fstab		##显示以UUID开头的行
sed -n '/^$/!p' fstab		##不显示空白行
sed -n '/^$/!p' fstab | sed -n '/^#/!p'	##不显示空白行和#所在行

(2)d模式操作

sed '/^UUID/d' fstab		##删除UUID所在行
sed '/^UUID/!d' fstab		##出UUID行,其他都删除
sed '/^#/d' fstab		##删除所有含#的行
sed '/^$/d' fstab		##删除空格行
cat -n fstab | sed '5d'		##删除第五行
cat -n fstab | sed '2d;5d'	##删除第二行和第五行
cat -n fstab | sed '2,5d'	##删除2-5行

(3)a模式操作

sed '/^UUID/ahello' fstab			##在UUID下一行添加
sed '/^UUID/ahello\nvan' fstab	                ##在UUID下一行添加两行
sed '4ahello\nvan' fstab			##在第四行的下一行添加
sed '4ihello\nvan' fstab			##在第四行插入

(4)c模式操作

sed '/#/chello' fstab			##将所有含#的行改为hello
sed '/^#/cwestos' -i fstab		##将所有含#的行给为westo并保存修改

练习:编写一个脚本,用来改写apache配置文件中的端口号

(5)w模式操作

sed '/^UUID/w file' fstab		##将UUID所在行,导入file文件,该文件可以不存在

 

(6).sed的其他用法

6.1统计文件行数

sed -n '/^UUID/=' fstab      ##统计文件的行数
sed '/^UUID/=' fstab         ##将行数放到UUID所处位置
sed -n '$=' fstab            ##统计行数
wc -l fstab | cut -d " " -f 1
 

6.2插入内容

sed '6r /opt/insert' fstab                      ##将/mnt/file文件的内容放到fstab文件的第六行后
sed '$r /opt/insert' fstab                      ##将/mnt/file文件的内容放到fstab文件的最后
sed '$r /opt/insert' fstab -i fstab          ##保存对该文件的修改,该文件必须存在,不存在则不能使用该命令
sed '$r/opt/insert' fstab > test             ##    保存修改到test文件中

6.3处理规则设定

sed -f rule fstab		根据文件中的规则对文件进行处理
vim rule
/^UUID/p
/UUID/=

 

6.4替换文件内容

sed 's/sbin/#########/g' passwd        ##将文件所有sbin替换成########
sed '1,5s/sbin/#########/g' passwd    ##将文件前五行中的sbin替换成########
sed '/adm/,/halt/s/sbin/********/g' passwd    ##将adm到halt行中的sbin替换成*******
sed 's/\///g' passwd            ##将passwd文件中的所有/删除

6.5 @与/等同

sed 's@/@#####@g' passwd        ##将passwd文件中的所有/替换成#####,其中@也是/
sed 's@sbin@####@g;s/nologin/*******/g' passwd
sed -e 's@sbin@####@g' -e 's/nologin/!!!!!/g' passwd

 6.6其他命令

sed 'G' fstab		##在每一行后面添加一个空白行
sed '$!G' fstab
sed '=' fstab		##在每一行前添加行号
sed '=' fstab | sed 'N;s/\n//'	##进行预处理

四 AWK

AWK是一种处理文本文件的语言。它将文件作为记录序列处理。在一般情况下,文件内容的每行都是一个记录。每行内容都会被分割成一系列的域,因此,我们可以认为一行的第一个词为第一个域,第二个词为第二个,以此类推。AWK程序是由一些处理特定模式的语句块构成的。AWK一次可以读取一个输入行。对每个输入行,AWK解释器会判断它是否符合程序中出现的各个模式,并执行符合的模式所对应的动作。

命令基本格式:

awk [optioins] {program} file

 

简化命令选项描述
-Ffs指定行中划分数据字段的字段分隔符 「* 超高频」
-ffile从指定的文件中读取程序
-vvar=value定义awk程序中的一个变量及其默认值
-mfN指定要处理的数据文件中的最大字段数
-mrN指定数据文件中的最大数据行数
-Wkeyword指定awk的兼容模式或者警告登记

$0 :代表整个文本行

$1:代表文本行中的第一个数据字段(第一列)

$2:代表文本行中的第二个数据字段(第二列)

$n:代表文本行中的第二个数据字段(第n列)

linux三剑客grep、sed、awk ^d/{sum+=$5} END{print "total size is:",int(sum/1024),"KB"}' //int是取整的意思。{print $1} //效果与awk -F":" '{print $1}'相同,只是分隔符使用FS在代码自身中指定。awk 'BEGIN{print "第1列","第2列"} {print $1,$2}' 1.sh。awk '{print NF}' 1.sh 输出每行有多少字段。 阅读详情

相关推荐

Linux文件处理三剑客详解-grep,sed,awk

grep 是一个强大的命令行工具,用于在文本文件中搜索指定的模式。它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。需要注意的是,grep会将匹配到的整行输出,而awk可以指定某一行某一列进行输出。日志分析和文本处理,grep可以从日志文件中找出错误信息或特定事件,也用于从大量文本文件中提取特定信息sed是编辑之剑:一个流编辑器,它允许用户在文件中进行文本替换、删除、添加等操作。sed支持基础和扩展的正则表达式,并提供了丰富的文本处理功能,如替换命令、地址定界等。

weixin_43592627的博客 1509

Linux三剑客(grep、awk和sed)操作及与管道结合使用

Linux三剑客grep、sed、awk的基本格式和常用命令,与管道结合的复杂使用

明静致远 4564

Linux系统-文本处理三剑客-grep命令、sed命令、awk命令

grep、sed、awk是linux操作文本的三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

m0_58341177的博客 1330

Linux三剑客awk、grep、sed详解

一、前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, head, tail.....,学习 linux 文本处理的懒惰方式(不是最好的方法)可能是:只学习grep,sed和awk。 使用这三个工具,你可以解决近 99% linux 系统的文本处理问题,而不需要记住上面不同的命令和参数。:) 而且,如果你已经学会并使用了三者,你就会知道其中的差异。实际上,这里的

LongtengGensSupreme博客 7392

【Linux学习】grep、sed、awk 三剑客实战

假设data.csv文件格式为 “字段 1, 字段 2, 字段 3”,要将其调整为 “字段 3, 字段 1, 字段 2”,并计算字段 1 和字段 3 的和,可以先使用sed 's/\([^,]*\),\([^,]*\),\([^,]*\)/\3,\1,\2/' data.csv调整格式,然后通过管道将结果传递给 awk:sed 's/\([^,]*\),\([^,]*\),\([^,]*\)/\3,\1,\2/' data.csv | awk -F',' '{print $1, $2, $1+$3}'。

nihao2q的博客 657

Linux系统开发: 学习linux三剑客(awk、sed、grep)(上)

一、前言 Linux中的三个命令awk、sed、grep在业界被称为“三剑客”,grep擅长查找,sed擅长取行和替换,awk擅长运算。 我们知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到三剑客命令。 三剑客与正则表达式息息相关,正则表达式是为了处理大量的文本|字符串而定义的一套规则和模版,这个模版是由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。正则表达式详情可参看资料《linux正则表达式》。 三剑

2163

文本处理三剑客(grep sed wak)

待续

austral_sep的博客 1138

Unity3D 2022版如何一键安装Newtonsoft.Json?最新Package Manager教程

本文详细介绍了在Unity3D 2022及以上版本中,如何通过Package Manager一键安装和配置Newtonsoft.Json(Json.NET)。教程涵盖了从打开Package Manager、搜索并安装正确包源,到验证安装和基础使用的完整流程,旨在帮助开发者以现代化、可靠的方式集成这一强大的JSON处理框架,提升开发效率并规避手动导入的常见问题。

lg888的博客 921

Linux命令之三剑客:grep、sed和awk用法详解

Linux系统下,grep、sed和awk三个命令被称为“三剑客”,它们都是非常强大的文本处理工具。 掌握它们的用法,可以大大提高我们在Linux下处理文本的效率

sinat_28305511的博客 3471

基于ROS下的安卓手机图像和IMU跑ORB-SLAM3

接之前文章继续,手上没有现成的单目+IMU硬件,但是安卓手机几乎人人都有。因此,本文讲下如何用手机跑ORB-SLAM3的Mono和Mono_Inertial。 1. 手机与PC通信 基于ROS下的信息发布和订阅,手机和PC在一个局域网下进行信息(image和IMU)传输。 手机APK参考了github上的2个开源Android_Camera-IMU和android_ros_sensors,基于ros_java生成安卓APP,下载安装任一个APP到安卓手机,界面分别是这样: 手机和PC连一个无

h_372101的博客 1万+

TwinCAT3实战:从零搭建倍福PLC的Modbus-TCP Server

本文详细介绍了如何使用TwinCAT3从零搭建倍福PLC的Modbus-TCP Server,包括环境准备、工程配置、参数设置、客户端连接测试及常见问题排查。通过实战步骤和实用技巧,帮助工程师快速掌握倍福PLC与Modbus-TCP的通信实现,提升工业自动化项目的开发效率。

weixin_30797199的博客 174

Linux三剑客(grep、awk、sed)

Linux三剑客及使用介绍 Linux 三剑客是(grep,sed,awk)三者的简称,他们通常结合正则一起使用。 grep擅长查找,sed擅长修改文件。awk擅长取列。 一、正则表达式 正则表达式:REGular EXPression, REGEXP 元字符:所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符 元字符 功能 . 匹配任意单个字符 * X* 匹配0或多个X字符 + X+ 匹配至少1个X字符 .* 匹配任意多个字符 ^ 匹配首行 $ 匹配行尾 ^

zheou的博客 6223

AI协议助手:法律文本解析与智能问答技术解析

自然语言处理(NLP)技术在法律文本解析中展现出巨大潜力,通过BERT等预训练模型实现条款分类与语义理解。结合OCR与知识图谱技术,AI协议助手能快速提取合同核心条款,并以问答形式解释法律术语,显著提升商务场景的决策效率。测试数据显示,该系统对NDA协议的识别准确率达92%,响应时间仅1.2秒,特别适用于人力资源竞业协议、云服务SLA评估等场景。随着RAG架构与法律术语向量库的应用,AI+法律正推动合同审核成本下降67%,未来将在跨境合规、智能谈判等方向持续演进。

weixin_29053577的博客 132

Linux三剑客(grep、awk、sed)超详细版

Linux的用户都知道,在Linux下一切皆文件,所以Linux下的操作就是对文件的操作。出于对文件更好的操作,今天给大家介绍一下常用的文本操作“三剑客”命令。

一只程序猿的修炼之旅 1万+

LCD驱动芯片——BL55072A驱动程序

初始化子程序: START 0x7C; I2C子地址 0xEA;ICSET,软件复位芯片 0xC0;MODSET,关显示 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8;ICSET,清复位bit1 STOP 显示刷新子程序: START 0x7C;I2C子地址 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8或0xEC;ICSE

love421的博客 3176

cefshap(C#)定义浏览器的右键菜单

菜单效果:复制(自带),搜索文本,打开链接,复制链接,刷新,检查,关于 public class MenuHandler : IContextMenuHandler { //public event Action<string> PopupRequest; void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrows

无线智能模块 可视DIY智能专家 1705

Linux 文本三剑客(grep, awk, sed)

awk:域分割,用于特定列筛选,用于比较两份文件的异同 grep: 过滤ls的文件,匹配文本的内容 sed:处理字符的增删改 内容涉及正则表达式,另外,每个命令都有若干模式参数,了解基本用法,必要时查阅help,做到不求甚解就好。

Russellfan的博客 2966

ESP32与INMP441麦克风模块实现音频传输

ESP32是一款低成本、低功耗的物联网开发板,支持Wi-Fi和蓝牙双模通信,内置双核处理器,适合音频处理和实时数据传输。INMP441是一款高性能数字麦克风模块,支持I2S接口,可提供高精度音频数据采集(24-bit分辨率,64-100 dB SNR)。

走向CTO的路上... 2040

13-14linux三剑客grep,sed,awk

Linux三剑客是指grep、sed和awk这三个强大的,它们在Linux系统中被广泛用于处理和分析文本数据。

zbdjdmm的博客 1770

全面认识PFC和LLC

想象一下,你在拉一辆车,如果你的力气都用在推动车子前进的方向上,这样拉车会比较轻松。而如果你的力气用在不正确的方向,比如侧向、斜向,那就需要更大的力气才能推动车子。PFC就是在帮助电流“朝着正确的方向”流动,这样可以用更少的能量做更多的事情,减少无用的功率损耗。PFC负责将电流方向对齐,让电源效率更高,而LLC负责电压的高效转换,两者配合可以在更宽的负载范围内保持高效率。综上所述,PFC LLC电路是一种高效的电源转换电路,通过PFC模块和LLC模块的组合,实现了从交流电到直流电的高效转换。

weixin_43199439的博客 6101

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

linux三剑客awk、sed、grep与cut的总结

Linux三剑客:awk、sed、grep和cut、正则表达式等使用技巧。

sym的博客 2442

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux文本处理三剑客grep,sed,awk

linux文本处理三剑客grep,sed,awk

weixin_73388622的博客 1484

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux文本处理三剑客:awk、sed、grep

3└─# cat a3RS 输入分隔符,直接不是一行一行处理了,例子:2段数据拼接计算,多少个单词6 24 114for循环,循环每一行的每一个字段。i<=NF;24i<=NF;6└─# df -h└─# df -hiUse%0%1%33%0%0%1%0%33%0%33%013300135123456123456数组,函数......

金灰的博客 1292

Linux三剑客(sed、awk、grep)

sed、awk、grep示例

叶小格的博客 1158

linux三剑客(grep、sed、awk)

linux三剑客的学习笔记

qq_41323475的博客 1万+

Linux三剑客grep-sed-awk

注意系统的字符集:en_US.UTF-8(大部分情况没问题),如果出现问题修改字符集为C:export LANG=C。给grep egrep加上颜色 ‘alias grep =‘grep --color=auto’’学习正则通过grep命令学习,grep加上单引号。1)比较符号: > < >= <= ==!快速掌握正则:配合grep -o 参数学习。4)特殊条件:BEGIN和END。数字表示取出某一列,注意在。3)范围:表达式//,//所有的符号都是英文符号。

atomLg的博客 652
上一篇: Linux系统之shell命令(diff,cut,sort,uniq)
下一篇: Shell基础知识详细介绍
vanvan_
博客等级 码龄9年 106粉丝 86原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值