网站搜索

如何使用 sed 和 awk 解析和编辑 Linux 配置文件

Linux 配置文件通常是纯文本,这使得它们可以轻松地使用命令行工具进行编辑。其中最强大的工具之一是 sed 和 awk.

虽然初学者可能依赖于使用 vi 或 nano 手动编辑,但经验丰富的系统管理员经常使用这些工具自动解析和重写配置文件。

这些工具允许您从命令行或脚本中匹配模式、提取字段,甚至实时更改配置文件。

在本文中,我们将探讨如何有效地使用sed和awk来读取、解析和重写配置文件。我们将通过实用示例,帮助自动化繁琐的任务,例如更新IP地址、更改参数或提取值。

让我们从一个简单的例子开始:使用sed替换配置参数。

示例 1:使用 sed 命令更新参数

假设您想在配置文件中更新 ListenPort 指令,例如 /etc/ssh/sshd_config,您可以这样做:

sed -i 's/^#\?ListenPort.*/ListenPort 2222/' /etc/ssh/sshd_config

这是什么功能:

Gawk脚本使用示例

开始使用 Gawk

如果您使用的是最新的Linux版本,gawk应该默认已安装。您可以通过检查其版本来确认.

使用gawk有不同的方法。常见的功能如下:

  • 格式化输出行
  • 转换数据文件
  • 逐行扫描文件
  • 将输入行拆分为字段
  • 生成格式化报告
  • 排序数据

gawk的基本语法是:

gawk [POSIX / GNU style options] -f program_file [ -- ] file gawk [POSIX / GNU style options] [ -- ] ‘program’ file ...

要使用 gawk,

阅读更多 →

使用grep、sed和awk命令的16个Bash正则表达式(RegEx)示例

正则表达式或 Regex 是一系列特殊字符的组合,形成一个模式,用于从文件中查找特定的模式匹配实例并对其进行操作。它主要用于在文件中搜索特定字符、单词、过滤或文本操作。

正则表达式在包括Linux Bash脚本在内的编程语言中广泛使用。在本指南中,我将介绍如何在Bash中使用正则表达式、主要的正则表达式,以及如何使用各种正则表达式处理引擎。

  • 什么是正则表达式
  • 正则表达式版本
  • 正则表达式的语法
  • 正则表达式语法的组成部分
  • 在Linux中使用正则表达式的16个示例
  • 正则表达式备忘单
  • 结论
什么是正则表达式

Linux中的正则表达式或regex是由特殊元字符组成的模式,用于匹配字符串或文本文件中的特定模式。

让我们通过一个现实生活中的例子来理解它,假设您想编写代码来查找一些特定的变量,然后在另一个代码文件中对它们进

阅读更多 →

Linux中的awk命令

awk 命令不仅仅是一条命令;它是一种脚本语言,就像 bash 一样。awk 命令用于高级模式扫描、数据提取和文本操作。由于其脚本支持,它对于 Linux 高级用户非常有用,无论是管理员、开发者还是 Linux 爱好者。例如,系统管理员可以迅速检查,例如日志处理/分析、跟踪网络 IP、生成报告和监控系统任务。

如果您希望在awk方面具备扎实的技术基础,本指南提供了关于awk命令的简要教程,包括其使用案例和示例。

awk Linux 命令

awk命令包含编程语言特性。由于其多种用途,awk已超越了其命令行竞争对手,如grep、cut等。因此,在深入探讨awk命令示例之前,让我们先讨论以下内容:

  • awk命令比grep、cut和其他竞争者更好在哪里?
  • awk命令的语法
  • awk命令可以用于哪些操作?
awk命令比grep、cut和其他竞争者更好吗?

让我们快速看一下为什么awk优于grep、cut和其他竞争对手。

  • awk 命令有内置变量,默认情况下是静默使用的。例如,"FS" 允许你用某个字符分割字段,你可以访问并对

    阅读更多 →

如何在 Linux 中的循环中使用 awk 进行算术运算

awk 命令是 Linux 中用于处理和分析文本文件的强大工具,当您需要在循环中执行算术运算时,它特别有用。

本文将指导你在循环中使用 awk 进行算术运算,使用简单的示例来阐明概念。

什么是 awk?

awk 是一种专为文本处理和数据提取而设计的脚本语言,它逐行读取输入,将每行拆分为多个字段,并允许您对这些字段执行作。它通常用于模式匹配、算术计算和生成格式化报表等任务。

awk 的基本语法是:

awk 'BEGIN { initialization } { actions } END { finalization }' file
  • BEGIN:在处理输入之前执行的代码块。
  • actions:为输入的每一行执行的代码块。
  • END:处理完所有行后执行的代码块。
在循环中执行算术运算

让我们通过以下有用的示例

阅读更多 →

使用 Awk 变量、表达式和运算符

Awk 命令系列越来越令人兴奋!我相信,在前面的 7 部分中,我们介绍了 Awk 的一些基础知识,您需要掌握这些基础知识才能在 Linux 中执行基本的文本或字符串过滤。

从这部分开始,我们将深入研究 Awk 的高级领域,以处理更复杂的文本或字符串过滤作。因此,我们将介绍 Awk 功能,例如变量、数值表达式和赋值运算符。

这些概念与您以前在许多编程语言(如 Shell、C、Python 等)中可能遇到的概念没有太大区别。所以,这个话题没有必要太担心;我们只是在修改使用这些功能的常见想法。

这可能是最容易理解的 Awk 命令部分之一,所以请坐下来,让我们开始吧

1. awk 变量

在任何编程语言中,变量都是存储值的占位符。在程序文件中创建变量时,在执行文件时,会在内存中创建一些空间,用于存储您为变量指定的值。

您可以按照定义 shell 变量的相同方式定义 Awk 变量,如下所示:

v

阅读更多 →

Linux awk 命令

在此页面上
  1. awk 命令
  2. 基本语法
  3. 示例
  4. 常见问题解答
  5. 结论

在 Linux shell 上可用的众多文本处理工具中,awk 因其强大的功能和多功能性而脱颖而出。 awk 最初由 Aho、Weinberger 和 Kernighan 于 20 世纪 70 年代开发,它不仅仅是一个命令 - 它是一种完整的编程语言,专为处理和分析文本文件而设计。

awk 命令

awk 将文件和流作为记录和字段的序列进行操作。默认情况下,记录被定义为一行,字段由空格分隔,尽管两者都可以重新定义。

基本语法

awk 的基本语法是:

  • 模式:指定何时应执行操作。如果省略,则该操作适用于每一行。
  • 动作:模式匹配时执行的一组命令。操作包含在大括号 {} 中。

阅读更多 →

awk 学习实用指南

下载我们的免费电子书,更好地掌握 awk 命令。

在所有 Linux 命令中(有很多),最典型的三个命令似乎是 sed、awk 和 grep。也许是因为它们的名字听起来很神秘,或者是它们潜在用途的广度,或者只是它们的年龄,但当有人给出“Linuxy”命令的例子时,它通常是这三个命令之一。虽然 sed 和 grep 都有几个简单的单行标准,但不太出名的 awk 仍然因特别令人困惑而一直突出。

您可能会使用 sed 进行快速字符串替换,或使用 grep 每天过滤模式。您编写 awk 命令的可能性要小得多。我经常想知道这是为什么,我将其归因于一些事情。首先,我们中的许多人几乎不使用 sed 和 grep 来执行任何操作,除了这两个命令的一些变化:

$ sed -e 's/foo/bar/g' file.txt $ grep foo file.txt

因此,即使您可能对 sed 和 grep 感觉更舒服,但您可能无法充分发挥它们的潜力。当然,没有义务学习更多有关

阅读更多 →

通过编写“猜数字”游戏来学习 awk

编程语言往往有许多共同的特征。学习一门新语言的一个好方法是创建一个熟悉的程序。在本文中,我将使用 awk 创建一个“猜数字”游戏来演示熟悉的概念。

当您学习一门新的编程语言时,最好关注大多数编程语言的共同点:

  • 变量——存储信息的地方
  • 表达式——计算事物的方法
  • 语句——在程序中表达状态变化的方式

这些概念是大多数编程语言的基础。

一旦你理解了这些概念,你就可以开始弄清楚剩下的事情了。例如,大多数语言都有一种由其设计支持的“做事方式”,并且这些方式在一个程序与另一个程序之间可能有很大不同。这些方式包括模块化(将相关功能分组在一起)、声明式与命令式、面向对象、低级与高级语法特征等等。许多程序员都熟悉的一个例子是“仪式”,即在解决问题之前设置场景所需的工作量。据说 Java 编程语言有一个重要的仪式要求,这源于它的设计,它要求所有代码都在类中定义。

但回到基础知识。编程语言通常有相似之处。一旦了解了一种编程语言,就开始学习另一种编程语言的基础知识,以了解该新语言的差异。

一个好的方法是创建一组基本测试程序。有了这些,学习就从这些相似之处开始。

您可以使用的一个测试程序是“猜数字”程序。计

阅读更多 →

使用awk计算字母频率

编写一个 awk 脚本来确定一组单词中最常见(和最不常见)的字母。

我最近开始编写一个游戏,您可以使用字母图块来构建单词。为了创建游戏,我需要知道英语中常规单词中字母的频率,以便我可以呈现一组有用的字母图块。字母频率在很多地方都有讨论,包括维基百科,但我想自己计算字母频率。

Linux 在 /usr/share/dict/words 文件中提供了单词列表,因此我已经有了可能使用的单词列表。 words 文件包含很多我想要的单词,但也有一些我不需要的单词。我想要一个不是复合词(没有连字符或空格)或专有名词(没有大写字母)的所有单词的列表。要获取该列表,我可以运行 grep 命令来仅提取仅由小写字母组成的行:

此正则表达式要求 grep 匹配仅包含小写字母的模式。模式中的字符 ^ 和 $ 分别表示行的开头和结尾。 [a-z] 分组将仅匹配小写字母 a 到 z。

以下

阅读更多 →