Board logo

标题: 使用命令行高效地进行文本编辑(1) [打印本页]

作者: look_w    时间: 2018-5-19 15:59     标题: 使用命令行高效地进行文本编辑(1)

引言大多数 UNIX® 开发人员都选择 Emacs、vi 或这两个文本编辑应用程序的众多变种、分支和克隆之一。操作员通常在所选的文本编辑器中打开文件,并交互式地对文件指定和应用更改。
但是与在文本编辑器中打开文件相比,您通常可以在命令行更快地完成编辑工作。复杂的编辑过程可以从命令行进行编程和指定,并跨多个文件执行,从而消除所有不必要的屏幕显示、光标移动和与文件的人工交互。一种很好的策略是在手边保留一些相关的命令行程序,以完成常见的编辑工作。它们不仅可以为您节省时间(尤其是在涉及到多个文件的批处理操作中),而且您还可以在脚本中使用它们。
用于编辑和处理文本的单命令行程序是 Perl 和 AWK(以及最近的 Ruby)语言(当然还包括 Shell)中有名的传统功能。本文使用在所有系统上都随时可用的三个最主要的命令行编辑工具来演示基本的文本编辑技术:cat、ed 和 sed。下面的编辑示例首先从最简单和最常见的构造开始,并逐步过渡到较复杂的构造。
使用 cat 进行编辑使用 cat(其名称表示“连接”)来连接文件和标准输入流,如 所示。世界上的懒鬼们还将它用作通用分页程序 (cat file) 和完整的文本编辑环境 (cat > file)。其语法的简单性无与伦比,而且对于文本编辑单命令行程序,它还为您提供了无需编辑器即可追加或插入文本的快捷方法。
清单 1. 使用 cat 来连接文件和标准输入流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ (cat - input1 - input2 - input3 - input4) | mailx ted
Ted,

Take a look at these example files.

This is the first file ...
Ctrl-D

This is the second file ...
Ctrl-D

This is the third file -- note the fourth paragraph below ...
Ctrl-D

And here's the last file ...
Ctrl-D
$




将文本添加到文件结尾然而,懒鬼也是讲策略的。当您需要将文本追加到文件结尾时,再没有比使用 cat 更快的方法了:
1
2
3
4
5
$ cat >> file
> line
> line
> line<br>Ctrl-D
$




当您在添加行时,按 Ctrl-U 可以删除当前行,按 Ctrl-Z 可以挂起该过程,按 Ctrl-C 可以中止所有操作。当您完成编辑时,可以在各行上按 Ctrl-D。(存在一些缺省的 Korn Shell 控制键,但它们适用于大多数 Shell 和编辑模式。)
如果您正在输入的数据是从另一个窗口粘贴而来的 X 选择,则该单命令行程序通常更快速,因为您不必调用某个编辑器、打开目标文件、移动到文件末尾、粘贴选择、保存文件然后再退出编辑器。当您是在粘贴格式化或特殊格式化的文本,并且您希望保留该格式(因为某些文本编辑器和编辑模式在您粘贴 X 选择时会对其进行重新格式化)时,单命令行程序也会更有用。
虽然此操作非常常见,是一项日常活动,但是您必须小心使用 shell 操作符来追加 重定向(>>) 而不是普通重定向操作符 (>);如果您错误地使用了后者,则会使用原本打算追加的文本改写文件的原有内容。
若要将一个文件的全部内容追加到另一个文件结尾,您可以给出文件名:
1
$ cat footnotes.txt >> file




如果您仅追加单行而不是多行或整个文件,您可以使用 echo 而不是 cat:
1
$ echo "192.255.255.255     bigblue" >> /etc/hosts




若要追加从 1 开始进行项目编号的文本行,可以使用 cat 的 -n 选项;这样将在各行前面附加行号(最多偏移五个空格字符)和一个制表符。添加 -b 选项可以禁止对空白行编号:
1
2
3
4
5
6
7
8
$ cat -nb > fileThis line is numberedAnd so is thisAnother numbered lineCtrl-D
$ cat file
     1  This line is numbered
     2  And so is this

     3  Another numbered line

$




在文件开头插入文本通过使用连字符 (-) 指定标准输入并写到一个新文件,您可以使用 cat 在文件开头插入文本:
1
2
3
4
5
6
$ cat - file > newfile
This is the beginning of the file
And then the old file is inserted
Below this line:

$




虽然这个单命令行程序非常简单,但是它的缺点在于创建了一个新文件。如果您希望将文本插入原始文件,则必须进行的重命名将使得此单命令行程序成事不足败事有余。更好的方法是使用即将介绍的 。
显示非打印字符cat 具有若干个有用的选项。其中一些选项控制它输出非打印字符的方式,例如制表符和控制字符。若要确定某个文件或某一组文本文件是否有嵌入的控制字符,可以使用这些选项。例如,如果某个文件具有尾随空格,您就可以使用这些选项:
1
2
3
4
5
$ cat -vet input.txt

This line has trailing blanks.    $
This line does not.$
$




这些选项随 UNIX 实现而异; 提供了标准 IBM AIX® 操作系统的选项。
表 1. AIX cat 中用于输出控制的选项选项描述-b不对空白行编号。-e使用 $ 字符显示行尾。-n从 1 开始对所有输出行编号。-q使用静默操作(禁止错误消息)。-r将所有多个空行替换为单行(“压缩”空白)。-S将多个空白行压缩到单行中(与 -r 相同)。-s禁止错误消息(静默操作)。-t将制表符显示为 ^I。-u不对输出进行缓冲。-v可视地显示非打印控制字符。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0