欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 【Linux “三剑客”:grep、sed、awk】

【Linux “三剑客”:grep、sed、awk】

2025/11/9 22:05:42 来源:https://blog.csdn.net/m0_47163275/article/details/144307097  浏览:    关键词:【Linux “三剑客”:grep、sed、awk】

在Linux系统中,grep、sed 和 awk 被统称为“三剑客”,它们是处理文本和数据的强大工具。这些命令与正则表达式紧密结合,提供了丰富的文本处理功能,下面列举在数据处理及核验当中常见场景进行介绍和演示。

grep

grep 命令是一个强大的文本搜索工具,用于搜索文件中匹配特定模式的行。grep全称是 Global Regular Expression Print,表示全局正则表达式版本,它支持正则表达式,可以递归地搜索目录,并且有多种选项来控制输出和搜索行为。
使用方法:

grep [args] content filename

一些常用参数:

-i : 查找时忽略大小写

-v: 反转查找,输出与模式不相符的行

-n : 显示符合模式要求的行号

-r : 递归搜索所有文件

-o : 只显示匹配的内容

-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。

示例:

假设有一个文本文件:test.txt,内容如下:

a b c d e
1 2 3 4 5
G E d C T G B
l k j h g f

1)执行命令 grep:

grep c test.txt

返回结果:a b c d e
(c 颜色高亮)

2)执行命令 grep -i:

grep -i c test.txt

返回结果:

a b c d e
G E d C T G B

(c 和 C 颜色高亮)

3)执行命令 grep -io:

grep -io c test.txt

返回结果:

c
C

(c 和 C 颜色高亮)

4)grep or 操作实现匹配多个值

4.1)grep -E

匹配"c" 或 “h” 所在行

执行命令:

grep -E 'c|h' test.txt

返回结果:

a b c d e
l k j h g f

(c 和 h 颜色高亮)
4.2)| 转义
执行命令:

grep 'c\|h' test.txt

返回结果:

a b c d e
l k j h g f

(c 和 h 颜色高亮)

sed

sed(stream editor) 是一种流编辑器,用于对文本进行过滤和转换,它可以执行基本的文本替换、删除、插入等操作。sed 通常在命令行中使用,并且可以处理来自文件或标准输入的数据流。

1)批量修改文件中的内容
sed 's/old/new/g' file 会将文件中的所有"old"替换为"new"。
它一次处理一行内容。会出数替换后的结果,但是文件内容并没有改变,除非你使用重定向存储输出或-i。如下:

sed -i 's/原字符串/替换字符串/g' filename 

-i:直接修改文件中的内容,并且不在屏幕上输出。不加 -i 不会修改文件中的内容且会将执行结果输出在屏幕上;
s 命令用于替换;
命令末端的 g 表示在行内全局替换;
也就是说如果每一行里出现多个“原字符串”,所有的 “原字符串”都会被替换为 “替换字符串”。

如果没有 g 命令,则只将每一行的第一个“原字符串”替换为 “替换字符串”。

2)查看文件行数
假设有一份文件filename.txt ,内容为:
hello(\n)
linux(\n)
java
(\n) 标注代表换行符。

一般常用的查看文件行数是wc -l

wc -l filename.txt

返回结果为: 2

如果我们按实际内容统计期望是返回3行记录,但 wc 命令统计行数时,它依据的是换行符(通常是 \n ),按所示例内容只有两个换行符。

当我们想要统计出实际有多少行内容时,可以采用示例命令:

sed -n "$=" filename

返回结果: 3
-n:抑制默认输出,即不打印每一行;;$表示最后一行;= 是一个打印行号的命令。所以 $= 的意思是打印最后一行的行号。

awk

awk是一个强大的文本处理工具,特别适合处理列数据。它可以用来提取、处理和打印数据列,并且支持复杂的模式匹配和动作执行。awk有自己的编程语言,可以进行条件判断、循环等操作。
数据文件常见场景及操作命令:

1)查看字段(列)数:

awk -F '\\|\\@\\|' 'END{print NF}'

在 awk 命令中,-F 选项用于指定输入字段的分隔符,分隔符是 |@|(其中用了反斜杠 \ 进行转义) ,在在处理完所有输入行之后(END),打印出当前记录的字段数(NF)

这个命令会打印出最后一行内容的字段数(列数)。

2)查看数据文件内容的某个字段的值

2.1)查看分隔符为|@|的数据文件的第一列:

awk -F '\\|\\@\\|' '{print $1}' filename

2.2)查看分隔符为|@|的数据文件的第一列和第三列:

awk -F '\\|\\@\\|' '{print $1,$3}' filename

2.3)返回分隔符为|@|的数据文件第6列值为 ’ money’ 的数据

可以与其他命令组合获得期望的效果。

awk -F '\\|\\@\\|' '{print $6}' filename | grep  money

小结

这三个工具在Linux文本处理中非常重要,在日常的数据文件处理和验证中,合理且灵活的使用它们,可以让我们的对数据的处理及核验效率更高,大大提高工作效率。它们的功能虽然强大,但通常只需要掌握它们各自擅长的领域即可:grep 擅长查找,sed 擅长编辑,awk 擅长报告生成。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词