0Pricing
Linux Command Line & Bash Scripting Mastery · 课时

结合正则表达式使用 sed/awk

将正则表达式融入“sed”和“awk”命令,实现高级文本过滤、替换和数据提取。

结合正则表达式使用 sed/awk 是 CoddyKit 上的免费 Linux Command Line & Bash Scripting Mastery 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Linux Command Line & Bash Scripting Mastery 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Linux Command Line & Bash Scripting Mastery 课程共包含 4 节课。

使用 sed 和 awk 处理正则表达式

欢迎学习正则表达式的最后一课!我们已经了解了正则表达式在模式匹配方面的强大功能。

现在,让我们将这种能力与两个重要的 Linux 工具结合起来:sed(流编辑器)和 awk(模式扫描与处理语言)。这种结合可以实现高级文本过滤、替换和数据提取。

sed:使用正则表达式进行过滤

sed 可以使用正则表达式过滤行。/pattern/ 地址允许 sed 仅对匹配给定正则表达式的行执行命令。

-n 选项会抑制默认输出,而 p 会显式打印匹配的行。

echo -e "apple
banana
orange" | sed -n '/an/p'

sed:使用正则表达式进行替换

sed 中的 s/regex/replacement/ 命令最能体现正则表达式在文本转换方面的优势。您可以将正则表达式找到的模式替换为新文本。

g 标志会替换一行中的所有匹配项,而 i 会使匹配不区分大小写。

echo "Hello world, hello universe" | sed 's/hello/hi/gi'

sed:捕获分组和反向引用

正则表达式允许您使用圆括号 () 定义捕获分组。然后,您可以在替换字符串中使用 \1、\2 等反向引用来引用这些分组匹配的文本。

对 sed 使用 -E,即可启用扩展正则表达式语法(例如,无需转义即可使用 ())。

echo "Doe, John" | sed -E 's/([A-Za-z]+), ([A-Za-z]+)/\2 \1/'

awk:使用正则表达式过滤记录

awk 会先使用正则表达式模式选择记录(行),然后执行操作。如果在操作代码块 {...} 前提供了模式,则只会对匹配该模式的行执行操作。

这与 grep 类似,但支持更复杂的处理。

echo -e "Line 1: apple
Line 2: banana
Line 3: orange" | awk '/banana/'

awk:对特定字段使用正则表达式

您可以在 awk 中使用 ~(匹配)和 !~(不匹配)运算符,将正则表达式模式应用于特定字段。这对于结构化数据处理非常强大。

例如,$1 ~ /pattern/ 会检查第一个字段是否匹配该正则表达式。

echo "Name: John, Age: 30
Name: Jane, Age: 25" | awk '$1 ~ /Name/ {print $2}'

awk:提取匹配项(match、substr)

awk 提供了 match(string, regex) 等函数来查找匹配项的位置和长度,还提供了 substr(string, start, length) 来提取匹配内容。

执行 match() 后,RSTART 保存匹配项的起始位置,RLENGTH 保存匹配项的长度。

echo "ItemCode: ABC123 Price: 45.67" | awk '{match($0, /[0-9]+\.[0-9]+/); print substr($0, RSTART, RLENGTH)}'

awk:就地替换(sub、gsub)

awk 还提供了用于替换的内置函数:sub(regex, replacement, target) 用于替换第一个匹配项,gsub(regex, replacement, target) 用于替换所有匹配项。

如果省略 target,则使用 $0(整条记录)。您也可以指定某个字段,例如 $1。

echo "apple,banana,orange" | awk '{gsub(/a/, "X", $0); print}'

在 sed 和 awk 之间进行选择

虽然 sed 和 awk 都可以使用正则表达式进行替换和过滤,但它们各有所长:

  • sed 通常更适合简单的逐行转换和替换。它是一个流编辑器。
  • awk 在处理结构化数据(字段)、执行计算以及处理更复杂的逻辑或跨行模式方面更强大。它本身就是一种编程语言。

通常,您可以使用管道 | 将它们连接起来,以完成非常复杂的任务。

挑战:提取和转换

请考虑以下文本行:

Order#12345: ProductX - Price $19.99

哪个命令可以正确提取价格(例如 '19.99'),然后将货币符号更改为 'EUR'?

回顾:使用 sed 和 awk 处理正则表达式

您已经掌握了将正则表达式与 sed 和 awk 结合使用的方法!

  • sed 擅长逐行过滤和替换文本,并使用正则表达式实现强大的模式匹配和替换。
  • awk 提供了更具编程性的处理方式,允许使用正则表达式过滤记录、在特定字段中进行匹配,并通过 match()、substr()、sub() 和 gsub() 等函数提取或修改数据。

这项技能对于 Linux 中的高级文本处理和脚本编写至关重要。

常见问题解答

「结合正则表达式使用 sed/awk」课时是免费的吗?

是的 — 「结合正则表达式使用 sed/awk」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Linux Command Line & Bash Scripting Mastery 课程的其余内容,请升级到 CoddyKit PRO。 Linux Command Line & Bash Scripting Mastery 课程共包含 4 节课。

「结合正则表达式使用 sed/awk」这节课中我会学到什么?

将正则表达式融入“sed”和“awk”命令,实现高级文本过滤、替换和数据提取。 你通过在浏览器中直接运行的动手代码来练习 Linux Command Line & Bash Scripting Mastery,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Linux Command Line & Bash Scripting Mastery 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Linux Command Line & Bash Scripting Mastery 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「结合正则表达式使用 sed/awk」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Linux Command Line & Bash Scripting Mastery 课中编写并运行代码吗?

能。每节 Linux Command Line & Bash Scripting Mastery 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 正则表达式简介(Regex)
  2. 使用正则表达式高级应用 Grep
  3. 结合正则表达式使用 sed/awk
  4. 捕获组、反向引用与替换
← 返回 Linux Command Line & Bash Scripting Mastery