当前位置:首页>Linux>零基础搞懂Linux三剑客:grep搜索、sed编辑、awk分析,一篇全通关

零基础搞懂Linux三剑客:grep搜索、sed编辑、awk分析,一篇全通关

  • 2026-09-17 16:29:02
零基础搞懂Linux三剑客:grep搜索、sed编辑、awk分析,一篇全通关
一,grep
1

简介

grep 是一个强大的文本搜索工具,用于在输入数据中根据模式进行搜索。它可以用来查找包含特定字符串或符合正则表达式的行,并将匹配的行打印到标准输出。grep 名称来源于 "global regular expression print"(全局正则表达式打印)。这个命令在处理日志文件、配置文件或任何文本数据搜索任务时极为有用。

2

常用选项

命令
说明
示例
s/pattern/repl/flags
替换(最常用)
sed 's/foo/bar/g' file
d
删除匹配行
sed '/^$/d' file
(删空行)
p
打印(需配合 -n)
sed -n '/error/p' log
a\文本
在行后追加
sed '/start/a\NEW LINE' file
i\文本
在行前插入
sed '2i\HEADER' data.txt
=
打印行号
sed -n '/error/=' log
1

基本语法

# 从文件中接收输入grep [选项] '搜索模式' 文件名# 从管道符中接收输入命令 |grep [选项] '搜索模式'

选项

•
-i:忽略大小写差异。
•
-v:反向匹配,打印不匹配的行。
•
-n:显示匹配行的行号。
•
-r 或 -R:递归搜索目录中的所有文件。
•
-w:匹配整个单词。
•
-c:只输出匹配行的数量。
•
-E:支持扩展正则表达式。
•
-o:只显示匹配的字符串,而非整行。
2

示例

# 从文件中搜索包含hello的行grep 'hello' file.txt# 忽略大小写grep -i 'hello' file.txt# 显示匹配行及其行号grep -n 'hello' file.txt# 打印不包含 "error" 的行grep -v 'error' log.txt# 在当前目录及其子目录中所有 .txt 文件中搜索 "important"grep -r 'important' *.txt# 查找以数字开始,后跟任意字符的行grep '^[0-9].*' data.txt# 过滤以b开头的行grep "^b" file.txt# 过滤以/结尾的行grep '/$' file.txt# 这个命令只排除完全空的行,即不包含任何字符(包括空格和制表符)的行。"$", 其中  表示行的开始,$ 表示行的结束,中间没有其他字符,因此这个正则表达式精确匹配空行。grep -v '^$' file.txt# 这个命令排除的是空行以及只包含空白字符(如空格、制表符等)的行。这里,\s* 表示零个或多个空白字符,因此 "^\s*$" 匹配的是开始是空白字符、结束也是空白字符的行,这包括了完全空的行以及那些只包含空格或制表符的行。grep -v '^\s*$' file.txt
二,awk
1

简介

awk 是一种强大的文本分析工具,它可以在没有编程经验的情况下,让用户方便地处理文本文件,完成诸如数据提取、过滤、统计、格式化输出等复杂任务。

2

核心要素

元素
说明
示例
$0
整行内容
awk '{print $0}' file
$1
, $2...
第1、2...字段(默认空格分隔)
awk '{print $1}' /etc/passwd
NR
当前记录号(行号)
awk 'NR==10' file
NF
当前行字段数
awk '{print NF}' data.csv
-F
指定分隔符
awk -F':' '{print $1}' /etc/passwd
BEGIN{}
 / END{}
预处理/后处理块
awk 'BEGIN{sum=0} {sum+=$1} END{print sum}' nums.txt
3

基本语法

•
模式:用于描述满足何种条件的行才会执行后续的动作。如果省略,则对所有行执行动作。
•
动作:定义了当模式匹配成功时所执行的一系列命令。
•
域:每一行被分解成多个部分,这些部分被称为“域”(列),默认以空格或制表符分隔,1表示第一列,1表示第一列,2表示第二列,以此类推
awk [选项] '模式/条件 {动作}' 输入文件

常用选项

•
-F:指定输入文件的字段分隔符,默认为空格或制表符。
•
-v:定义 awk 脚本中的变量及其初始值。
4

示例

# 打印文件的所有行awk '{print}' example.txt# 打印文件的第二列awk '{print $2}' example.txt# 只打印包含 "error" 的列awk '/error/ {print}' log.txt# 计算某列的总和awk '{sum += $1} END {print sum}' numbers.txt# 将每行的第一个字段和第三个字段用逗号连接,并打印awk '{print $1 "," $3}' data.csv
三,sed
1

简介

sed(Stream Editor)是一个强大的文本处理工具,用于在不直接修改源文件的情况下,对文本文件进行自动化编辑、替换、删除、添加等操作。sed 命令常用于批处理脚本中,以完成文本的快速转换工作。

2

核心用法

命令
说明
示例
s/pattern/repl/flags
替换(最常用)
sed 's/foo/bar/g' file
d
删除匹配行
sed '/^$/d' file
(删空行)
p
打印(需配合 -n)
sed -n '/error/p' log
a\文本
在行后追加
sed '/start/a\NEW LINE' file
i\文本
在行前插入
sed '2i\HEADER' data.txt
=
打印行号
sed -n '/error/=' log
3

基本语法

•
s/原始文本/新文本/flags:替换操作,将匹配到的原始文本替换为新文本。常用标志有 g(全局替换)。
•
d:删除操作,删除匹配到的行。
•
p:打印操作,打印指定的行。默认情况下,所有行都会被打印,除非使用了 -n 选项。
•
a \ 新文本:追加操作,在匹配到的行之后追加新文本。
•
i \ 新文本:插入操作,在匹配到的行之前插入新文本。
•
c \ 新文本:替换行操作,将匹配到的行替换为新文本。
sed [选项] '操作' 输入文件

常用选项

•
-n:抑制默认的输出行为,只有明确指定打印的行才会被输出。
•
-i:直接修改原文件内容(谨慎使用!)。某些系统可能需要 -i'' 或 -i.bak 来创建备份。
•
-e:允许在命令行上指定多个编辑命令。
4

示例

# 将文本文件中的 "old_text" 替换为 "new_text"sed 's/old_text/new_text/g' example.txt# 删除包含 "delete_me" 的行sed '/delete_me/d' file.txt# 只打印包含 "pattern" 的行sed -n '/pattern/p' data.txt# 在包含 "append_here" 的下一行追加 "Appended text"sed '/append_here/a Appended text' input.txt# 在包含 "append_here" 的上一行插入 "Appended text"sed '/append_here/i Appended text' input.txt# 直接在原文件上进行替换操作(谨慎操作,建议先备份文件)sed -i 's/original_text/new_text/g' myfile.txt

最新文章

随机文章