网站搜索

LFCS #1:如何在 Linux 中使用“sed”命令进行文件操作


Linux 基金会宣布推出 LFCS(Linux 基金会认证系统管理员)认证,这是一项新计划,旨在帮助世界各地的个人获得 Linux 系统基础到中级系统管理任务的认证。

这包括支持正在运行的系统和服务,以及第一手的故障排除和分析,以及将问题升级给工程团队的明智决策。

2023 年 8 月 11 日的最后一次修订以来,我们已经仔细考虑了领域和能力,与 2023 年 5 月 11 日的生效日期保持一致,正如官方宣布的那样Linux 基金会。

该系列的标题为 LFCSLinux 基金会认证系统管理员)的准备部分 133,涵盖以下主题:

Part 1

如何在 Linux 中使用“Sed”命令操作文件

Part 2

如何在 Linux 中安装和使用 Vi/Vim

Part 3

如何在 Linux 中压缩文件和目录以及查找文件

Part 4

对存储设备进行分区、格式化文件系统和配置交换分区

Part 5

在 Linux 中挂载/卸载本地和网络(Samba 和 NFS)文件系统

Part 6

将分区组装为 RAID 设备 – 创建和管理系统备份

Part 7

管理系统启动进程和服务(SysVinit、Systemd 和 Upstart)

Part 8

如何管理用户和组、文件权限和 Sudo 访问

Part 9

使用 Yum、RPM、Apt、Dpkg、Aptitude 和 Zypper 进行 Linux 包管理

Part 10

学习基本的 Shell 脚本和文件系统故障排除

Part 11

如何使用 vgcreate、lvcreate 和 lvextend 命令管理和创建 LVM

Part 12

如何使用已安装的帮助文档和工具探索 Linux

Part 13

如何配置 Grand Unified Bootloader (GRUB) 并对其进行故障排除

Part 14

监控 Linux 进程资源使用情况并按用户设置进程限制

Part 15

如何在 Linux 系统中设置或修改内核运行时参数

Part 16

在 Linux 中使用 SELinux 或 AppArmor 实施强制访问控制

Part 17

如何为用户和组设置访问控制列表 (ACL) 和磁盘配额

Part 18

安装网络服务并配置开机自动启动

Part 19

设置 FTP 服务器以允许匿名登录的终极指南

Part 20

设置基本递归缓存 DNS 服务器并为域配置区域

Part 21

如何安装、保护 MariaDB 数据库服务器并对其进行性能调优

Part 22

如何安装和配置 NFS 服务器以进行文件系统共享

Part 23

如何使用 SSL 证书通过基于名称的虚拟主机设置 Apache

Part 24

如何设置 Iptables 防火墙以启用对 Linux 中服务的远程访问

Part 25

如何将 Linux 变成路由器来静态和动态处理流量

Part 26

如何使用 Cryptsetup 工具设置加密文件系统和交换

Part 27

如何监控系统使用情况、中断以及对 Linux 服务器进行故障排除

Part 28

如何设置网络存储库来安装或更新软件包

Part 29

如何审核网络性能、安全性和故障排除

Part 30

如何安装和管理虚拟机和容器

Part 31

学习 Git 基础知识以高效管理项目

Part 32

在 Linux 中配置 IPv4 和 IPv6 地址的初学者指南

Part 33

在 Ubuntu 中创建网络绑定和桥接的初学者指南

这篇文章是 33 教程系列的第 1 部分,该系列教程将涵盖 LFCS 认证考试所需的必要领域和能力。话虽这么说,启动你的终端,让我们开始吧。

在 Linux 中处理文本流

Linux 将程序的输入和输出视为字符流(或序列)。要开始了解重定向和管道,我们必须首先了解三种最重要的 I/O(输入和输出)流类型,它们实际上是特殊文件(按照 UNIX 和 Linux 的约定,数据流和外设,或设备文件,也被视为普通文件)。

> (重定向运算符)和 | (管道运算符)之间的区别在于,前者将命令与文件连接,后者将命令的输出与另一个命令的输出连接命令。

command > file
command1 | command2

由于重定向操作符会默默地创建或覆盖文件,因此我们必须极其谨慎地使用它,切勿将其与管道混淆。

Linux 和 UNIX 系统上管道的一个优点是管道不涉及中间文件 - 第一个命令的 stdout 不会写入文件,然后由第二个命令读取。

在接下来的练习中,我们将使用诗歌“快乐的孩子”(匿名作者)。

使用 sed 命令

sed 这个名称是流编辑器的缩写。对于那些不熟悉该术语的人来说,流编辑器用于对输入流(文件或来自管道的输入)执行基本文本转换。

将文件中的小写更改为大写

sed 最基本(也是最流行)的用法是字符替换。我们首先将每次出现的小写 y 更改为大写 Y 并将输出重定向到 ahappychild2.txt

g 标志指示 sed 应该对文件的每一行上的所有 term 实例执行替换。如果省略此标志,sed 将仅替换每行中第一次出现的术语。

Sed 基本语法:
sed ‘s/term/replacement/flag’ file
我们的例子:
sed ‘s/y/Y/g’ ahappychild.txt > ahappychild2.txt

搜索并替换文件中的单词

如果您想搜索或替换特殊字符(例如 /\&),则需要将其转义,即术语或替换字符串,带有反斜杠。

例如,我们将用单词 and 代替 & 符号。同时,当在行首找到第一个单词时,我们会将单词I替换为You

sed 's/and/\&/g;s/^I/You/g' ahappychild.txt

在上面的命令中,^(插入符号)是一个众所周知的正则表达式,用于表示行的开头。

正如您所看到的,我们可以组合两个或多个替换命令(并在其中使用正则表达式),方法是用分号分隔它们并将集合括在单引号内。

打印文件中选定的行

sed 的另一个用途是显示(或删除)文件的选定部分。在以下示例中,我们将显示 6 月 8 日以来的前 5 行 /var/log/messages

sed -n '/^Jun  8/ p' /var/log/messages | sed -n 1,5p

请注意,默认情况下,sed 打印每一行。我们可以使用 -n 选项覆盖此行为,然后告诉 sed 仅打印(由 p 指示)文件(或管道)中与模式匹配的部分(第一种情况下为 6 月 8 日,第 1 行至第 5 行为第二种情况)。

最后,在检查脚本或配置文件时检查代码本身并省略注释可能很有用。以下 sed 单行删除 (d) 个空行或以 # 开头的空行(| 字符表示布尔值 OR< 位于两个正则表达式之间)。

sed '/^#\|^$/d' apache2.conf

唯一命令

uniq 命令允许我们报告或删除文件中的重复行,默认情况下写入 stdout。我们必须注意 uniq 不会检测重复的行,除非它们是相邻的。

因此,uniq 通常与前面的sort(用于对文本文件的行进行排序)一起使用。默认情况下,sort 将第一个字段(以空格分隔)作为关键字段。要指定不同的键字段,我们需要使用 -k 选项。

Uniq 命令示例

du -sch /path/to/directory/* 命令以人类可读的格式返回指定目录中每个子目录和文件的磁盘空间使用情况(还显示每个目录的总计),并且不按大小排序输出,但按子目录和文件名排序。

我们可以使用下面的命令来按大小排序。

du -sch /var/* | sort –h

您可以通过告诉 uniq 使用每行的前 6 个字符 (-w 6) 执行比较来按日期计算日志中的事件数(其中日期指定),并使用以下命令为每个输出行添加出现次数的前缀 (-c)。

cat /var/log/mail.log | uniq -c -w 6

最后,您可以组合 sortuniq (通常如此)。考虑以下文件,其中包含捐赠者列表、捐赠日期和金额。假设我们想知道有多少个独特的捐赠者。

我们将使用以下 cat 命令来剪切第一个字段(字段由冒号分隔)、按名称排序并删除重复行。

cat sortuniq.txt | cut -d: -f1 | sort | uniq

grep 命令

grep 命令搜索文本文件或(命令输出)是否出现指定的正则表达式,并将包含匹配项的任何行输出到标准输出。

Grep 命令示例

显示用户 gacanepa 的 /etc/passwd 信息,忽略大小写。

grep -i gacanepa /etc/passwd

显示名称以 rc 开头后跟任意单个数字的 /etc 的所有内容。

ls -l /etc | grep rc[0-9]

tr 命令用法

tr 命令可用于翻译(更改)或删除 stdin 中的字符,并将结果写入 stdout。

将 sortuniq.txt 文件中的所有小写字母更改为大写字母。

cat sortuniq.txt | tr [:lower:] [:upper:]

ls –l 输出中的分隔符压缩为仅一个空格。

ls -l | tr -s ' '

剪切命令用法

cut 命令提取输入行的一部分(从标准输入或文件),并根据字节数(-b 选项)、字符数(-c) 或字段 (-f)。

在最后一种情况(基于字段)中,默认字段分隔符是制表符,但可以使用 -d 选项指定不同的分隔符。

剪切命令示例

/etc/passwd 中提取用户帐户和分配给他们的默认 shell(-d 选项允许我们指定字段分隔符和 -f 开关指示将提取哪个字段。

cat /etc/passwd | cut -d: -f1,7

总而言之,我们将创建一个文本流,其中包含 last 命令输出的第一个和第三个非空白文件。我们将使用 grep 作为第一个过滤器来检查用户 gacanepa 的会话,然后将分隔符压缩为仅一个空格 (tr -s ' ' )。

接下来,我们将使用 cut 提取第一个和第三个字段,最后按显示唯一的第二个字段(在本例中为 IP 地址)进行排序。

last | grep gacanepa | tr -s ' ' | cut -d' ' -f1,3 | sort -k2 | uniq

上面的命令展示了如何组合多个命令和管道,以便根据我们的愿望获得过滤后的数据。您也可以随意按部分运行它,以帮助您查看从一个命令到下一个命令的管道输出(顺便说一句,这可能是一次很棒的学习体验!)。

概括

尽管此示例(以及当前教程中的其余示例)乍一看似乎不太有用,但它们是开始尝试用于在 Linux 中创建、编辑和操作文件的命令的一个很好的起点。命令行。

请随时在下面留下您的问题和评论 - 我们将不胜感激!

LFCS 电子书现已可供购买。立即订购您的副本,开始您成为认证 Linux 系统管理员的旅程!

Product Name Price Buy
The Linux Foundation’s LFCS Certification Preparation Guide $19.99 [Buy Now]

最后但并非最不重要的一点是,请考虑使用以下链接购买考试券,以便为我们赚取小额佣金,这将有助于我们不断更新本书。