RHCSA 系列(四): 编辑文本文件及分析文本

作为系统管理员的日常职责的一部分,每个系统管理员都必须处理文本文件,这包括编辑已有文件(大多可能是配置文件),或创建新的文件。有这样一个说法,假如你想在 Linux 世界中挑起一场圣战,你可以询问系统管理员们,什么是他们最喜爱的编辑器以及为什么。在这篇文章中,我们并不打算那样做,但我们将向你呈现一些技巧,这些技巧对使用两款在 RHEL 7 中最为常用的文本编辑器: nano(由于其简单和易用,特别是对于新手来说)和 vi/m(由于其自身的几个特色使得它不仅仅是一个简单的编辑器)来说都大有裨益。我确信你可以找到更多的理由来使用其中的一个或另一个,或许其他的一些编辑器如 emacs 或 pico。这完全取决于你自己。

RHCSA: 使用 Nano 和 Vim 编辑文本文件 – Part 4

使用 Nano 编辑器来编辑文件

要启动 nano,你可以在命令提示符下输入 nano,或可选地跟上一个文件名(在这种情况下,若文件存在,它将在编辑模式中被打开)。若文件不存在,或我们省略了文件名, nano 也将在编辑模式下开启,但将为我们开启一个空白屏以便开始输入:

Nano 编辑器

正如你在上一张图片中所见的那样, nano 在屏幕的底部呈现出一些可以通过指定的快捷键来触发的功能(^,即插入记号,代指 Ctrl 键)。它们中的一些是:

  • Ctrl + G: 触发一个帮助菜单,带有一个关于功能和相应的描述的完整列表;

Nano 编辑器帮助菜单

  • Ctrl + O: 保存更改到一个文件。它可以让你用一个与源文件相同或不同的名称来保存该文件,然后按 Enter 键来确认。

Nano 编辑器的保存更改模式

  • Ctrl + X: 离开当前文件,假如更改没有被保存,则它们将被丢弃;
  • Ctrl + R: 通过指定一个完整的文件路径,让你选择一个文件来将该文件的内容插入到当前文件中;

Nano: 插入文件内容到主文件中

上图的操作将把 /etc/passwd 的内容插入到当前文件中。

  • Ctrl + K: 剪切当前行;
  • Ctrl + U: 粘贴;
  • Ctrl + C: 取消当前的操作并返回先前的屏幕;

为了轻松地在打开的文件中浏览, nano 提供了下面的功能:

  • Ctrl + F 和 Ctrl + B 分别先前或向后移动光标;而 Ctrl + P 和 Ctrl + N 则分别向上或向下移动一行,功能与箭头键相同;
  • Ctrl + space 和 Alt + space 分别向前或向后移动一个单词;

最后,

  • 假如你想将光标移动到文档中的特定位置,使用 Ctrl + _ (下划线) 并接着输入 X,Y 将准确地带你到 第 X 行,第 Y 列。

在 nano 中定位到具体的行和列

上面的例子将带你到当前文档的第 15 行,第 14 列。

假如你可以回忆起你早期的 Linux 岁月,特别是当你刚从 Windows 迁移到 Linux 中,你就可能会同意:对于一个新手来说,使用 nano 来开始学习是最好的方式。

使用 Vim 编辑器来编辑文件

Vim 是 vi 的加强版本,它是 Linux 中一个著名的文本编辑器,可在所有兼容 POSIX 的 *nix 系统中获取到,例如在 RHEL 7 中。假如你有机会并可以安装 Vim,请继续;假如不能,这篇文章中的大多数(若不是全部)的提示也应该可以正常工作。

Vim 的一个出众的特点是可以在多个不同的模式中进行操作:

  • 命令模式Command Mode将允许你在文件中跳转和输入命令,这些命令是由一个或多个字母组成的简洁且大小写敏感的组合。假如你想重复执行某个命令特定次数,你可以在这个命令前加上需要重复的次数(这个规则只有极少数例外)。例如, yy(或 Y,yank 的缩写)可以复制整个当前行,而 4yy(或4Y)则复制整个从当前行到接下来的 3 行(总共 4 行)。
  • 我们总是可以通过敲击 Esc 键来进入命令模式(无论我们正工作在哪个模式下)。
  • 在末行模式Ex Mode中,你可以操作文件(包括保存当前文件和运行外部的程序或命令)。要进入末行模式,你必须从命令模式中(换言之,输入 Esc + :)输入一个冒号(:),再直接跟上你想使用的末行模式命令的名称。
  • 对于插入模式Insert Mode,可以输入字母 i 进入,然后只需要输入文字即可。大多数的击键结果都将出现在屏幕中的文本中。

现在,让我们看看如何在 vim 中执行在上一节列举的针对 nano 的相同的操作。不要忘记敲击 Enter 键来确认 vim 命令。

为了从命令行中获取 vim 的完整手册,在命令模式下键入 :help 并敲击 Enter 键:

vim 编辑器帮助菜单

上面的部分呈现出一个内容列表,这些定义的小节则描述了 Vim 的特定话题。要浏览某一个小节,可以将光标放到它的上面,然后按 Ctrl + ] (闭方括号)。注意,底部的小节展示的是当前文件的内容。

1、 要保存更改到文件,在命令模式中运行下面命令中的任意一个,就可以达到这个目的:


  1. :wq!
  2. :x!
  3. ZZ (是的,两个 ZZ,前面无需添加冒号)

2、 要离开并丢弃更改,使用 :q!。这个命令也将允许你离开上面描述过的帮助菜单,并返回到命令模式中的当前文件。

3、 剪切 N 行:在命令模式中键入 Ndd

4、 复制 M 行:在命令模式中键入 Myy

5、 粘贴先前剪贴或复制过的行:在命令模式中按 P键。

6、 要插入另一个文件的内容到当前文件:


  1. :r filename

例如,插入 /etc/fstab 的内容,可以这样做:

在 vi 编辑器中插入文件的内容

在 vi 编辑器中插入文件的内容

7、 插入一个命令的输出到当前文档:


  1. :r! command

例如,要在光标所在的当前位置后面插入日期和时间:

在 vi 编辑器中插入时间和日期

在另一篇我写的文章中,(LFCS 系列(二)),我更加详细地解释了在 vim 中可用的键盘快捷键和功能。或许你可以参考那个教程来查看如何使用这个强大的文本编辑器的更深入的例子。

使用 grep 和正则表达式来分析文本

到现在为止,你已经学习了如何使用 nano 或 vim 创建和编辑文件。打个比方说,假如你成为了一个文本编辑器忍者 – 那又怎样呢? 在其他事情上,你也需要知道如何在文本中搜索正则表达式。

正则表达式(也称为 "regex" 或 "regexp") 是一种识别一个特定文本字符串或模式的方式,使得一个程序可以将这个模式和任意的文本字符串相比较。尽管利用 grep 来使用正则表达式值得用一整篇文章来描述,这里就让我们复习一些基本的知识:

1、 最简单的正则表达式是一个由数字和字母构成的字符串(例如,单词 "svm") ,或者两个(在使用两个字符串时,你可以使用 |(或) 操作符):


  1. # grep -Ei 'svm|vmx' /proc/cpuinfo

上面命令的输出结果中若有这两个字符串之一的出现,则标志着你的处理器支持虚拟化:

正则表达式示例

2、 第二种正则表达式是一个范围列表,由方括号包裹。

例如, c[aeiou]t 匹配字符串 cat、cet、cit、cot 和 cut,而 [a-z] 和 [0-9] 则相应地匹配小写字母或十进制数字。假如你想重复正则表达式 X 次,在正则表达式的后面立即输入 {X}即可。

例如,让我们从 /etc/fstab 中析出存储设备的 UUID:


  1. # grep -Ei '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' -o /etc/fstab

从一个文件中析出字符串

方括号中的第一个表达式 [0-9a-f] 被用来表示小写的十六进制字符,{8}是一个量词,暗示前面匹配的字符串应该重复的次数(在一个 UUID 中的开头序列是一个 8 个字符长的十六进制字符串)。

在圆括号中,量词 {4}和连字符暗示下一个序列是一个 4 个字符长的十六进制字符串,接着的量词 ({3})表示前面的表达式要重复 3 次。

最后,在 UUID 中的最后一个 12 个字符长的十六进制字符串可以由 [0-9a-f]{12} 取得, -o 选项表示只打印出在 /etc/fstab中匹配行中的匹配的(非空)部分。

3、 POSIX 字符类

字符类 匹配 …
[:alnum:] 任意字母或数字 [a-zA-Z0-9]
[:alpha:] 任意字母 [a-zA-Z]
[:blank:] 空格或制表符
[:cntrl:] 任意控制字符 (ASCII 码的 0 至 32)
[:digit:] 任意数字 [0-9]
[:graph:] 任意可见字符
[:lower:] 任意小写字母 [a-z]
[:print:] 任意非控制字符
[:space:] 任意空格
[:punct:] 任意标点字符
[:upper:] 任意大写字母 [A-Z]
[:xdigit:] 任意十六进制数字 [0-9a-fA-F]
[:word:] 任意字母,数字和下划线 [a-zA-Z0-9_]

例如,我们可能会对查找已添加到我们系统中给真实用户的 UID 和 GID(参考“RHCSA 系列(二): 如何进行文件和目录管理”来回忆起这些知识)感兴趣。那么,我们将在 /etc/passwd 文件中查找 4 个字符长的序列:


  1. # grep -Ei [[:digit:]]{4} /etc/passwd

在文件中查找一个字符串

上面的示例可能不是真实世界中使用正则表达式的最好案例,但它清晰地启发了我们如何使用 POSIX 字符类来使用 grep 分析文本。

总结

在这篇文章中,我们已经提供了一些技巧来最大地利用针对命令行用户的两个文本编辑器 nano 和 vim,这两个工具都有相关的扩展文档可供阅读,你可以分别查询它们的官方网站(链接在下面给出)以及使用“RHCSA 系列(一): 回顾基础命令及系统文档”中给出的建议。

本文来自合作伙伴“Linux中国”,原文发布日期:2015-09-16

时间: 2024-07-29 03:49:49

RHCSA 系列(四): 编辑文本文件及分析文本的相关文章

RHCSA 系列(一): 回顾基础命令及系统文档

RHCSA (红帽认证系统工程师) 是由 RedHat 公司举行的认证考试,这家公司给商业公司提供开源操作系统和软件,除此之外,还为这些企业和机构提供支持.训练以及咨询服务等. RHCSA 考试准备指南 RHCSA 考试(考试编号 EX200)通过后可以获取由 RedHat 公司颁发的证书. RHCSA 考试是 RHCT(红帽认证技师)的升级版,而且 RHCSA 必须在新的 Red Hat Enterprise Linux(红帽企业版)下完成.RHCT 和 RHCSA 的主要变化就是 RHCT

RHCSA 系列(十四): 在 RHEL 7 中设置基于 LDAP 的认证

在这篇文章中,我们将首先罗列一些 LDAP 的基础知识(它是什么,它被用于何处以及为什么会被这样使用),然后向你展示如何使用 RHEL 7 系统来设置一个 LDAP 服务器以及配置一个客户端来使用它达到认证的目的. RHCSA 系列:设置 LDAP 服务器及客户端认证 – Part 14 正如你将看到的那样,关于认证,还存在其他可能的应用场景,但在这篇指南中,我们将只关注基于 LDAP 的认证.另外,请记住,由于这个话题的广泛性,在这里我们将只涵盖它的基础知识,但你可以参考位于总结部分中列出的文

RHCSA 系列(十五): 虚拟化基础和使用 KVM 进行虚拟机管理

假如你在词典中查一下单词 "虚拟化virtualize",你将会发现它的意思是 "创造某些事物的一个虚拟物(而非真实的)".在计算机行业中,术语虚拟化virtualization指的是:在相同的物理(硬件)系统上,同时运行多个操作系统,且这几个系统相互隔离的可能性,而那个硬件在虚拟化架构中被称作宿主机host. RHCSA 系列: 虚拟化基础和使用 KVM 进行虚拟机管理 – Part 15 通过使用虚拟机监视器(也被称为虚拟机管理程序hypervisor),虚拟机

RHCSA 系列(十一): 使用 firewalld 和 iptables 来控制网络流量

简单来说,防火墙就是一个基于一系列预先定义的规则(例如流量包的目的地或来源,流量的类型等)的安全系统,它控制着一个网络中的流入和流出流量. RHCSA: 使用 FirewallD 和 Iptables 来控制网络流量 – Part 11 在本文中,我们将回顾 firewalld 和 iptables 的基础知识.前者是 RHEL 7 中的默认动态防火墙守护进程,而后者则是针对 Linux 的传统的防火墙服务,大多数的系统和网络管理员都非常熟悉它,并且在 RHEL 7 中也可以用. Firewal

VSTO之旅系列(四):创建Word解决方案

原文:VSTO之旅系列(四):创建Word解决方案 本专题概要 引言 Word对象模型 创建Word外接程序 小结   一.引言 在上一个专题中主要为大家介绍如何自定义我们的Excel 界面的,然而在这个专题中,我将为大家介绍如何用VSTO来创建Word项目,对于Word的VSTO开发和Excel的开发很类似,你同样也可以为Word自定义界面的,他们的区别主要在于对象模型的不同,只要熟悉了Word的对象模型,操作Word也就很简单了.下面首先就开始介绍Word的对象模型的. 二.Word对象模型

c#编辑的网页 text文本框架如何插入图片和表情

问题描述 c#编辑的网页 text文本框架如何插入图片和表情 c#编辑的网页 text文本框架如何插入图片和表情就像提问框上面这种 解决方案 看你用的什么编辑器 比如Fckeditor kindeditor ueditor等等 然后google各自+"插入图片",就有结果 解决方案二: 搜索富文本框编辑器,一般都是js的,少数有net控件版的 解决方案三: 这个你得用到富文本编辑器 http://download.csdn.net/detail/happy09li/4523141 或者

RHCSA 系列(十三): 在 RHEL 7 中使用 SELinux 进行强制访问控制

在本系列的前面几篇文章中,我们已经详细地探索了至少两种访问控制方法:标准的 ugo/rwx 权限(RHCSA 系列(三): 如何管理 RHEL7 的用户和组) 和访问控制列表(RHCSA 系列(七): 使用 ACL(访问控制列表) 和挂载 Samba/NFS 共享). RHCSA 认证:SELinux 精要和控制文件系统的访问 尽管作为第一级别的权限和访问控制机制是必要的,但它们同样有一些局限,而这些局限则可以由安全增强 LinuxSecurity Enhanced Linux,简称为 SELi

Windows Azure入门教学系列 (四):使用Blob Storage

本文将会介绍如何使用Blob Storage.Blob Storage可以看做是云端的文件系统.与桌面操作系统上不同,我们是通过REST API来进行对文件的操作.有关REST API的详细信息,请参见Blob 服务 API. 为了方便.NET开发人员,我们在SDK中提供了Microsoft.WindowsAzure.StorageClient类来帮助发送REST请求. 在开始本教学之前,请确保你从Windows Azure 平台下载下载并安装了最新的Windows Azure开发工具.本教学使

BootStrap智能表单实战系列(四)表单布局介绍_javascript技巧

什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 表单的布局分为自动布局和自定义布局两种: 自动布局就是根据配置项中第二级配置项中数组的长度来自动使用不同的bootstrap栅格,通过设置autoLayout为true可以实现自动布局 自动以布局就是根据autoLayout来决定使用的栅格,通过设置autoLayout:'1,2,1,2,2,4' 表示 第一.二列占3格