使用Unix命令行模式高效地进行文本编辑.doc
《使用Unix命令行模式高效地进行文本编辑.doc》由会员分享,可在线阅读,更多相关《使用Unix命令行模式高效地进行文本编辑.doc(11页珍藏版)》请在咨信网上搜索。
使用Unix命令行模式高效地进行文本编辑 大多数 UNIX® 开发人员都选择 Emacs、vi 或这两个文本编辑应用程序的众多变种、分支和克隆之一。操作员通常在所选的文本编辑器中打开文件,并交互式地对文件指定和应用更改。 但是与在文本编辑器中打开文件相比,您通常可以在命令行更快地完成编辑工作。复杂的编辑过程可以从命令行进行编程和指定,并跨多个文件执行,从而消除所有不必要的屏幕显示、光标移动和与文件的人工交互。一种很好的策略是在手边保留一些相关的命令行程序,以完成常见的编辑工作。它们不仅可以为您节省时间(尤其是在涉及到多个文件的批处理操作中),而且您还可以在脚本中使用它们。 用于编辑和处理文本的单命令行程序是 Perl 和 AWK(以及最近的 Ruby)语言(当然还包括 Shell)中有名的传统功能。本文使用在所有系统上都随时可用的三个最主要的命令行编辑工具来演示基本的文本编辑技术:cat、ed 和 sed。下面的编辑示例首先从最简单和最常见的构造开始,并逐步过渡到较复杂的构造。 使用 cat 进行编辑 使用 cat(其名称表示“连接”)来连接文件和标准输入流,如清单 1 所示。世界上的懒鬼们还将它用作通用分页程序 (cat file) 和完整的文本编辑环境 (cat > file)。其语法的简单性无与伦比,而且对于文本编辑单命令行程序,它还为您提供了无需编辑器即可追加或插入文本的快捷方法。 清单 1. 使用 cat 来连接文件和标准输入流 $ (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 更快的方法了: $ cat >> file > line > line > line Ctrl-D $ 当您在添加行时,按 Ctrl-U 可以删除当前行,按 Ctrl-Z 可以挂起该过程,按 Ctrl-C 可以中止所有操作。当您完成编辑时,可以在各行上按 Ctrl-D。(存在一些缺省的 Korn Shell 控制键,但它们适用于大多数 Shell 和编辑模式。) 如果您正在输入的数据是从另一个窗口粘贴而来的 X 选择,则该单命令行程序通常更快速,因为您不必调用某个编辑器、打开目标文件、移动到文件末尾、粘贴选择、保存文件然后再退出编辑器。当您是在粘贴格式化或特殊格式化的文本,并且您希望保留该格式(因为某些文本编辑器和编辑模式在您粘贴 X 选择时会对其进行重新格式化)时,单命令行程序也会更有用。 虽然此操作非常常见,是一项日常活动,但是您必须小心使用 shell 操作符来追加 重定向(>>) 而不是普通重定向操作符 (>);如果您错误地使用了后者,则会使用原本打算追加的文本改写文件的原有内容。 若要将一个文件的全部内容追加到另一个文件结尾,您可以给出文件名: $ cat footnotes.txt >> file 如果您仅追加单行而不是多行或整个文件,您可以使用 echo 而不是 cat: $ echo "192.255.255.255 bigblue" >> /etc/hosts 若要追加从 1 开始进行项目编号的文本行,可以使用 cat 的 -n 选项;这样将在各行前面附加行号(最多偏移五个空格字符)和一个制表符。添加 -b 选项可以禁止对空白行编号: $ cat -nb > file This line is numbered And so is this Another numbered line Ctrl-D $ cat file 1 This line is numbered 2 And so is this 3 Another numbered line $ 在文件开头插入文本 通过使用连字符 (-) 指定标准输入并写到一个新文件,您可以使用 cat 在文件开头插入文本: $ cat - file > newfile This is the beginning of the file And then the old file is inserted Below this line: Ctrl-D $ 虽然这个单命令行程序非常简单,但是它的缺点在于创建了一个新文件。如果您希望将文本插入原始文件,则必须进行的重命名将使得此单命令行程序成事不足败事有余。更好的方法是使用即将介绍的 ed。 显示非打印字符 cat 具有若干个有用的选项。其中一些选项控制它输出非打印字符的方式,例如制表符和控制字符。若要确定某个文件或某一组文本文件是否有嵌入的控制字符,可以使用这些选项。例如,如果某个文件具有尾随空格,您就可以使用这些选项: $ cat -vet input.txt This line has trailing blanks. $ This line does not.$ $ 这些选项随 UNIX 实现而异;表 1 提供了标准 IBM AIX® 操作系统的选项。 表 1. AIX cat 中用于输出控制的选项 选项 描述 -b 不对空白行编号。 -e 使用 $ 字符显示行尾。 -n 从 1 开始对所有输出行编号。 -q 使用静默操作(禁止错误消息)。 -r 将所有多个空行替换为单行(“压缩”空白)。 -S 将多个空白行压缩到单行中(与 -r 相同)。 -s 禁止错误消息(静默操作)。 -t 将制表符显示为 ^I。 -u 不对输出进行缓冲。 -v 可视地显示非打印控制字符。 使用 ed 进行编辑 顾名思义,行编辑器 ed 对输入文件的行执行编辑。它将整个文件读入自己的缓冲区,对该副本执行指定的操作,并可选地将缓冲区写到磁盘。您可以在编辑操作中指定任何数量的行,并且这些操作可以在一个序列中进行组合和指定。这些事实使得 ed 成为在脚本中使用的理想选择。以如下格式指定操作: [address]command [text] address 指定要处理的一行或多行(缺省为当前行),并且可以通过多种方式进行指定。单字符的 command 是要对指定行执行的操作。对于脚本中的特别单命令行程序,可以使用 echo 将一组命令和文本管道传输给 ed,从而以非交互式的方式使用它。 ( echo 'OPERATION'; echo 'OPERATION'; ... echo 'wq' ) | ed -s FILENAME 如果在操作中输入文本,应该回显一个句点 (.) 来指示输入结束。最后的 wq 写入文件并退出。-s 选项使 ed 静默地操作,并禁止所有正常输出。 幸运的是,ed 的基本寻址方法和命令是相当标准化的。表 2 描述了主要的寻址形式。表 3 给出了命令。 表 2. 在 ed 中对行寻址 选项 描述 . 此选项对当前行寻址(缺省地址)。 number 此选项对第 number 行寻址。可以按逗号分隔的范围 (first,last) 对行寻址。0 代表缓冲区的开头(第一行之前)。 -number 此选项对当前行之前的第 number 行寻址。如果没有 number,则减号对紧跟在当前行之前的行寻址。 +number 此选项对当前行之后的第 number 行寻址。如果没有 number,则加号对紧跟在当前行之后的行寻址。 $ 此选项对最后一行寻址。 , 此选项对第一至最后一行寻址,包括第一行和最后一行(与 1,$ 相同)。 ; 此选项对当前行至最后一行寻址。 /pattern/ 此选项对下一个包含与 pattern 匹配的文本的行寻址。 ?pattern? 此选项对上一个包含与 pattern 匹配的文本的行寻址。 表 3. 主要的 ed 命令 命令 描述 a 此命令在指定的地址之后追加文本。 c 此命令将指定的地址更改为给定的文本。 d 此命令删除指定地址处的行。 i 此命令在指定的地址之前插入文本。 q 此命令在将缓冲区保存到磁盘后终止程序并退出。 r file 此命令读取 filespec 的内容并将其插入指定的地址之后。 s/pattern/replacement/ 此命令将匹配 pattern 的文本替换为指定地址中的 replacement 文本。 w file 此命令将指定的地址写到 file。如果没有 address,则此命令缺省使用整个缓冲区。 在文件开头插入文本,第二部分 通过可在脚本中使用的 ed 单命令行程序,您可以容易地在文件开头插入文本。插入操作是使用 ed 并通过 a 命令将给定文本追加到第 0 行(文件开头)来完成的: $ cat file This is the end. $ (echo '0a'; echo 'This is the beginning.'; echo '.'; echo 'wq') | ed -s file $ cat file This is the beginning. This is the end. $ 您可以交互式地完成同样的任务: $ cat file This is the end. $ ed -s file > 0a > This is the beginning. > . > wq $ cat file This is the beginning. This is the end. $ 若要在文件开头插入另一个文件的内容,可以使用 r 命令: $ (echo '0r headnotes'; echo 'wq') | ed file 在给定字符串之后插入文本 您可以使用 ed 将任何数量的文本行插入文件中任意行之前或之后。若要在第一个包含给定字符串的行之后插入,可以将该字符串包括在斜杠中,并在后面跟着 a 命令以追加随后的文本。与前面一样,各个行使用一个句点结束,并使用 wq 写入文件并退出。 当您希望在文件中的特定位置追加文本块时,此项技术就会派上用场: $ ( echo '/begin/a'; echo 'This is the middle.'; \ > echo '.'; echo 'wq') | ed -s file $ cat file This is the beginning. This is the middle. This is the end. $ 当您对一组文件执行多行文本插入时,此项技术也非常有用。如果要插入大量的行,可以使用 here document,这是使用 << 和一个限制字符串以内联方式指定的文档,用于重定向其后直至到达限制字符串的所有输入(请参见参考资料): $ for i in *.xml > { ed -s $i << EOF > //a \ > \ > johnnycomelately \ > 10 \ > 4 \ > \ > . > wq > EOF > } $ 您可以在给定字符串之后插入一个文件: $ (echo '/END OF PART I/r footnotes.txt'; echo 'wq') | ed file 删除行 使用 d 命令来删除文件中的行。与本文讨论的所有命令一样,您可以指定任何类型的有效地址,例如特定的行或行范围。在实践中,此单命令行程序最适合于与至少一个匹配的模式结合使用,例如删除从第一个匹配某模式的行到文件结尾的所有行: $ ( echo '/FOOTNOTES/,$/d'; echo 'wq' ) | ed -s file 也可以按相反方向执行此操作,并删除从该文件的第一行到第一个匹配某模式的行的所有内容: $ ( echo '1,/\.\.\./d'; echo 'wq' ) | ed -s file 删除尾随空格 通过使用 s 命令并替换一个空替换字符,您可以删除尾随空格: $ cat -vet input.txt This line has trailing blanks. $ This line does not.$ $ (echo ',s/ *$//'; echo 'wq') | ed -s input.txt $ cat -vet input.txt This line has trailing blanks.$ This line does not.$ $ 使用 sed 进行编辑 本文讨论的最复杂和最强大的编辑工具是 sed(流编辑器)。它是一个文本编辑器,但是与诸如 ed 等文本编辑器不同,它编辑输入流并写到输出流。因此,它对于编辑命令输出或对于使用其他工具对文件进行预处理非常有用——然后您可以将该文本通过管道直接输出给 sed,以进行快速编辑。但是 sed 还可以操作文件,并且其脚本语言具有高级模式匹配功能,因此它是用于执行任何类型的快速文本编辑的理想选择——例如对一组文件进行快速搜索和替换。事实上,它是现有用于文本编辑的最流行命令行工具之一。 sed 接受包含任何数量命令的脚本,后面跟着可选的指定输入文件的选项;缺省情况下,它读取标准输入。某些版本的 sed 有一个 -i 选项,此选项指定应该编辑的输入文件。(如果没有此选项,则读取输入文件,而不对其执行写入。)如果您安装的版本支持此选项,则应该使用它——它允许您使用单个命令对任何指定的文件执行快速编辑操作。 sed -i script filespec 以下示例假设您的 sed 支持 -i 选项。否则,您必须使用 Shell 重定向将输出保存到新文件,并在另一个步骤将新文件重命名为旧文件,从而执行临时文件中转: sed script file > newfile; mv newfile file 对于多个文件,您必须执行循环: for i in *; { sed script $i > $i.new; mv $i.new $i; } 替换文件中的文本 您可以使用 s/searchstring/replacestring/ 构造将给定字符串替换为另一个字符串。若要替换某个文件中每行上的第一个 old 实例,可以使用以下命令: $ sed -i 's/old/new/' file 若要替换每个实例,可以对该搜索追加 g 选项。此项技术对于修复输入错误或替换一个或一组文件中的重复单词、短语或其他内容非常理想。 $ sed -i 's/Esclipse/Eclipse/g' *.xml 您可以在输入表达式中将字符包括在方括号中,但是,如果您在替换文本中使用方括号,则会将它们视为普通字符: $ cat file This is the beginning. This is the middle. This is the end. $ sed 's/[Tt]h/[Tt]h/g' file [Tt]his is [Tt]he beginning. [Tt]his is [Tt]he middle. [Tt]his is [Tt]he end. 当要搜索或替换的短语包括斜杠字符时,应使用它来定义新的分隔符: $ sed -i 's,/usr/local/websphere,/usr/websphere,' file 您还可以将包含某个模式的整个行替换为某些新文本: $ sed -i 's/.*pattern.*/LINE DELETED/' file 编辑匹配的模式 回想一下在模式中将字符分组在一起的方括号示例,以及如何在替换文本中将它们视为普通字符。如果您希望在替换文本中包括字面匹配的模式,该怎么办呢?可以使用“和”号 (&) 来实现。此方法对于通过在匹配模式之前或之后放置文本来编辑匹配模式是非常有用的: $ cat file This is the beginning. This is the middle. This is the end. $ sed 's/[Tt]h/>& >Thth >Thth >Thth 在匹配模式之后插入文本 使用 a 命令在给定的匹配模式后面添加一行文本: $ sed -i '/pattern/a text' file 这并不替换与模式匹配的文本——它只是在第一个包含该模式的行后面添加文本。 在行开头插入文本 若要在每行开头插入文本,可以匹配脱字号元字符并提供要插入的文本。下面显示了如何向文件中的所有行添加电子邮件样式引用: $ sed 's/^/> /' input.txt > This line has trailing blanks. > This line does not. $ 在行尾插入文本 同样的原理也适用于在每行结尾插入文本——匹配美元符号元字符并提供要插入的文本。下面演示了如何模拟 AIX cat 的 -vet 选项来标记尾随空格: $ sed 's/$/$/' file This line has trailing blanks. $ This line does not.$ $ 删除文件中的行 d 命令删除给定的行。您可以在它前面附加行号、范围、要匹配或包括在斜杠中的模式。 若要删除文件中的第一行,可以使用以下命令: $ sed -i 1d file 若要删除第 1 至第 10 行,可以使用以下命令: $ sed -i 1,10d file 若要删除“BEGIN QUOTE”字符串的第一个实例到“END QUOTE”字符串的第一个实例之间的所有行,可以使用以下命令: $ sed -i '/BEGIN QUOTE/,/END QUOTE/d' file 若要删除当前目录中扩展名为 .xml 的所有文件中第一行包含“”并且最后一行包含“""”的所有文本部分,可以使用以下命令: $ sed -i '//,/<\/record>/d' *.xml 若要删除从第一行直到第一个空白行的所有内容,可以使用以下命令: $ sed -i '/^> /d' file (当在电子邮件消息或 Usenet 文章中使用时,前述单命令行程序将除去所有标头。) 若要删除所有以电子邮件样式引用开头的行,可以使用以下命令: $ sed -i /^$/d file 若要删除文件的最后一行,可以使用以下命令: $ sed -i '$d' file 删除尾随空格 如果文件中的行包含需要清除的尾随空格字符,在文本编辑器中人工查找并删除它们会非常麻烦,但是使用 sed 完成此任务将成为一个快速的单行操作。您可以搜索行尾之前出现一次或多次的字面空格字符,并将其替换为空字符: $ cat -vet input.txt This line has trailing blanks. $ This line does not.$ $ sed -i 's/ *$//' input.txt $ cat -vet input.txt This line has trailing blanks.$ This line does not.$ $ 总结 通过从 UNIX 命令行运行单命令行程序,可以利用多种有意义和复合的方式(无需编辑器)对文本文件进行编辑。您这样做有许多很好的理由:为了提高速度和方便性,在无法或不适合使用交互式编辑的情况下可编写脚本,有时为了对单个文件或一组文件执行复杂编辑,这些编辑操作难于甚至无法在交互式应用程序中完成。本文使用三个普遍存在的编辑工具,通过许多简单文本编辑单命令行程序阐述了这一概念:cat、ed 和 sed。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 Unix 命令行 模式 高效 进行 文本编辑
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【pc****0】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【pc****0】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【pc****0】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【pc****0】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文