SHELL三剑客grep,sed,awk使用教程

简介

有时候需要在 Linux 处理数据,Linux 上有三种命令行工具:

  • awk:一种强大的文本处理工具,常用于模式匹配和数据提取。
  • sed:流编辑器,用于对文本进行基本的编辑和转换,适合批量处理文件内容。
  • grep:用于搜索文本文件中匹配特定模式的行,支持正则表达式。

这三者结合可以很方便的处理和分析数据,是 Linux 系统管理员和开发者的重要工具。

人称 shell 三剑客

grep

这是一个命令行搜索工具,可以在文件或输入流中搜索特定模式的行

结合管道命令将执行的结果传递给后面,对于完成一些复杂的操作很友好

语法:

1
grep [选项] 模式 [文件...]

常见选项

  • -i:忽略大小写
  • -v:反向匹配,只显示不匹配的内容

sed

sed 是一个文本处理工具,用于在命令行中对文件中的文本进行修改。它的输入可以是文件,也可以从管道读取数据

语法:

1
sed [选项] '命令' [文件...]

常见选项

  • -i:直接修改文件内容
  • -n:静默输出,不输出文件中的内容

常见命令

  • s/pattern/replacement/flag:这是最常用的命令,用于将匹配的 pattern 替换为 replacement

案例

将文件中所有 “apple” 替换为 “orange”

1
sed 's/apple/orange/g' myfile.txt

awk

awk 是一种文本处理工具,主要用于从文本文件中提取数据并进行格式化输出。 它是一种编程语言,允许你编写脚本来处理文本数据。 awk 逐行读取输入文件,将每一行分割成字段,然后根据你定义的规则对这些字段进行处理。

语法:

1
awk [选项] '模式 {动作}' [文件...]

常见选项:

  • -F:指定字段分隔符,默认是空格或制表符
1
awk -F':' '{print $1}' /etc/passwd  # 使用 ":" 作为分隔符,打印 /etc/passwd 文件的第一个字段 (用户名)
  • -v:定义变量
1
awk -v name="John" '{print "Hello, " name}' myfile.txt  # 定义变量 name 并打印

内置变量:

  • $0:整行文本
  • $1,$2,…:第一个字段,第二字段
  • NF:当前行的字段数
  • NR:当前行的行号

模式:

  • 正则表达式:
1
awk '/pattern/ {print $0}' myfile.txt  # 打印包含 "pattern" 的行
  • 关系表达式:
1
awk '$1 > 10 {print $0}' myfile.txt  # 打印第一个字段大于 10 的行
页面浏览量Loading
网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计
-->